Quels sont les caractères doivent être échappés en HTML 5?
HTML 4 états jolie quels sont les personnages devrait être échappé:
Quatre entité de caractère références méritent une mention spéciale car ils
sont fréquemment utilisés pour échapper les caractères spéciaux:
- "<" représente le < signe.
- ">" représente le > signe.
- "&" représente le & signe.
- "" représente la " marque.
Les auteurs souhaitant
pour mettre le "<" caractère dans le texte devraient utiliser "<" (ASCII décimal 60)
pour éviter la confusion possible avec le début d'un tag (balise de début de l'
ouvrir délimiteur). De même, les auteurs devraient utiliser ">" (ASCII décimal
62) dans le texte au lieu de ">" pour éviter les problèmes avec les anciens agents d'utilisateur
mal perçoivent cela comme la fin d'une balise (tag fermer
séparateur) lorsqu'il apparaît dans la cité des valeurs d'attribut.Les auteurs devraient utiliser "&" (ASCII décimal 38) au lieu de "&" pour éviter
la confusion avec le début d'un personnage de référence (entité
référence ouvert délimiteur). Les auteurs doivent également utiliser des "&" dans
les valeurs d'attribut depuis références sont admis à l'intérieur CDATA
les valeurs d'attribut.Certains auteurs utilisent le caractère de l'entité de référence """ pour coder
les instances de la double guillemet (") étant donné que le caractère peut être
utilisé pour délimiter les valeurs d'attribut.
Je suis surpris, je ne peux pas trouver quelque chose comme cela en HTML 5. Avec l'aide de grep le seul non-XML mentionner que j'ai pu trouver se présente comme une réserve pour le obsolète XMP élément:
De l'utilisation de pré et de code au lieu de cela, et d'échapper à la "<" et "&" caractères "<" et "&", respectivement.
Pourrait quelque peu le point de la source officielle sur cette question?
"
en double-cité des attributs et des '
dans une seule cité attributs (évidemment ambigu), plus <
dans le texte en dehors des attributs (seulement ambigu parfois, mais provoque toujours des erreurs de validation). <b>2 > 1</b>
est valide HTML5. &
est aussi une erreur lors de l'ambigu.Merci, mais... je me sens encore tout cela fait sens, mais il n'est pas normatif de l'article le concernant. HTML n'est pas, après tout, très invitant pour le "sens" de l'orientation. (Dire,
<p>
pourrait sans ambiguïté fermer tous les <em>
et <strong>
balises de l'alinéa précédent, etc.) Pourquoi cette omission, tout en consacrant du temps à "moins que la première chose de l'élément est un commentaire". Il se sent comme une erreur majeure.Je ne suis pas sûr de ce que cela a à voir avec s'échapper des règles, mais la correction automatique des balises non fermées à une sorte d'reconnaissable arbre a besoin d'exister pour des raisons historiques.
Je voulais dire avec mon exemple que je n'étais pas à la recherche pour des raisons convaincantes ou le sens commun, puisque le HTML (par exemple, à la différence de XML) un haut degré d'arbitraire. Au lieu de cela, j'étais à la recherche d'une source, qui vous aimablement fourni. Merci encore.
OriginalL'auteur ezequiel-garzon | 2014-09-01
Vous devez vous connecter pour publier un commentaire.
La spécification définit la syntaxe normale éléments:
De sorte que vous avez à s'échapper
<
, ou&
lorsqu'il est suivi par tout ce qui pourrait commencer une référence de caractère. La règle de l'esperluette est la seule règle pour la cité des attributs, que l'adéquation entre guillemet est la seule chose qui va mettre fin à un. (Évidemment, si vous ne voulez pas mettre fin à la valeur de l'attribut d'y échapper les guillemets.)Ces règles ne s'appliquent pas à
<script>
et<style>
; il faut éviter de mettre du contenu dynamique dans ceux-ci. (Si vous ont pour inclure JSON dans un<script>
, remplacer<
avec\x3c
, U+2028 caractères avec\u2028
, et U+2029 avec\u2029
après la sérialisation JSON.)&hello there
devrait être OK car il n'a pas un point-virgule de fin, et pourtant, l'officiel des validateurs de le rejeter. Savez-vous pourquoi?Voir w3.org/html/wg/drafts/html/master/...; “Dans le fragment suivant, cependant, la valeur de l'attribut est en fait "?art©", pas la destination "?art©", parce que, même sans le point-virgule final, "©" est traité de la même manière que "©" et obtient ainsi interprété comme "©":”. Encore une fois, des raisons historiques. =/
Wow! Vous savez ce genre de choses! Merci d'avoir pris le temps de répondre aux commentaires. Et je viens de trouver les références que vous avez fournies dans le WHATWG (ce qui est logique), donc je prends ça à mon retour de mon commentaire précédent. Merci beaucoup!
Merci pour la question! Ces sont vraiment importantes considérations de sécurité, et je suis heureux d'être un peu plus familier avec le cas maintenant.
Cela s'applique à HTML de sérialisation de HTML5. En XHTML sérialisation de HTML5, XML tous les règles s'appliquent, de sorte que “&” doit toujours être échappé.
OriginalL'auteur Ry-
De http://www.w3.org/html/wg/drafts/html/master/single-page.html#serializing-html-fragments
*Algorithme est intégré dans l'algorithme de sérialisation comme disant par exemple par le
innerHTML
getter.Strictement parlant, ce n'est pas exactement un aswer à votre question, puisqu'il traite de la sérialisation plutôt que de l'analyse. Mais d'un autre côté, la sérialisé de sortie est conçu pour être analysée en toute sécurité. Donc, par voie de conséquence, lors de l'écriture de balisage:
&
personnage devrait être remplacé par&
(surprise!...)"
doivent être échappés comme"
<
doivent être échappés comme<
et>
doivent être échappés comme>
Je suis intentionaly écrit "devrait", et non pas "doit", depuis les analyseurs peuvent être en mesure de corriger les violations de la ci-dessus.
OriginalL'auteur user123444555621
Ajouter ma voix à insister pour que les choses ne sont pas faciles, -- à proprement parler:
Cas 1 : HTML sérialisation
(le plus commun)
Si vous sérialiser vos HTML5 comme HTML, "le texte ne doit pas contenir le caractère U+003C SIGNE inférieur à (<) ou l'ambiguïté d'un commercial."
L'ambiguïté d'un commercial est un "commercial suivi par un ou plusieurs caractères alphanumériques ASCII, suivi d'un U+003B caractère point-VIRGULE (;)"
En outre, "l'analyse de certains caractères nommée références dans les attributs qui arrive, même avec la fermeture de point-virgule étant omis."
Donc, dans ce cas
editable && copy
(notez les espaces autour de &&) est valide HTML5 sérialisé en HTML la construction aucun des esperluettes est suivi par une lettre.Comme un contre-exemple:
editable&©
n'est pas sûr (même si cela pourrait fonctionner) comme la dernière séquence©
pourrait être interprété comme une entité de référence pour©
Cas 1 : la sérialisation XML
(moins fréquent)
Ici le classique XML règles s'appliquent. Par exemple, chaque esperluette soit dans le texte ou dans les attributs doivent être échappés comme
&
.Dans ce cas
&&
(avec ou sans espace) n'est pas valide XML. Vous devriez écrire&&
Délicat, n'est-ce pas ?
OriginalL'auteur Sylvain Leroux