Oui. Comme le disait l'erreur, en HTML, les attributs sont #PCDATA, ce qui signifie qu'ils sont analysés. Cela signifie que vous pouvez utiliser des entités de caractères dans les attributs. Utilisation de &
en soi est erroné et, si ce n'est pour les navigateurs indulgents et le fait qu'il s'agit de HTML et non de XHTML, briserait l'analyse. Il suffit de l'échapper comme &
et tout irait bien.
HTML5 vous permet de ne pas l'échapper, mais uniquement lorsque les données qui suivent ne ressemblent pas à une référence de caractère valide. Cependant, il est préférable d'échapper toutes les instances de ce symbole plutôt que de se demander lesquelles doivent l'être et lesquelles n'ont pas besoin de l'être.
Gardez ce point à l'esprit ; si vous n'échappez pas & à &, c'est déjà assez mauvais pour les données que vous créez (où le code pourrait très bien être invalide), vous pourriez aussi ne pas échapper les délimiteurs de balises, ce qui est un énorme problème pour les données soumises par les utilisateurs, qui pourraient très bien conduire à l'injection de HTML et de script, au vol de cookies et à d'autres exploits.
S'il vous plaît, échappez votre code. Cela vous évitera bien des soucis à l'avenir.
65 votes
Les spécifications ne le disent pas. L'affiche fait référence à HTML5 qui n'exige pas l'échappement de l'esperluette dans tous les scénarios.
2 votes
Il devrait s'agir de la Communauté Wiki, puisque vous recherchez des opinions, et ne pas être pointilleux sur la validation implique qu'il n'y a pas de base objective sur laquelle répondre.
10 votes
@Richard : vraiment ? Bien que je ne sois pas d'accord avec le fait que "la validation n'a pas d'importance", je vois cela comme une question très objective : "est-ce que ça casse autre chose que la spécification ?"
0 votes
@Joachim Sauer - Votre exemple est une bonne question... ce n'est pas ce que la question est cependant :P Les mots exacts "je suis curieux d'entendre l'opinion des gens" apparaissent même dans le texte !
3 votes
@Richard : Je ne suis pas d'accord ici. "Ai-je vraiment besoin de faire
&
...] Je suis curieux d'entendre l'opinion des gens à ce sujet et de savoir ce qu'ils en pensent. si c'est important et pourquoi ." (c'est moi qui souligne). Ces deux éléments indiquent qu'il s'intéresse aux informations factuelles, mais qu'il sait qu'une grande partie de ces informations est ouverte à une certaine interprétation, c'est pourquoi il demande plusieurs avis.0 votes
@Joachim Sauer - C'est vrai. Je reconnais la validité de votre opinion... mais je maintiens la mienne également ;)
2 votes
@YiJiang Les navigateurs web actuels font beaucoup d'efforts pour comprendre l'utilisateur . Et Google aussi . C'est une partie de la Spec. Futurs navigateurs web mai être moins indulgent. C'est donc toujours une bonne idée de vérifier comment Wikipédia s'y prend, et de les copier.
0 votes
Lorsque le xslt transforme le xml en html, il n'échappe pas & comme & dans les valeurs des attributs.
0 votes
@unixman83 C'est une bonne approche : voyez comment wikipedia le fait.
0 votes
Google lui-même utilise
&
dans les urls href. Voir la source sur google.com o plus.google.com J'ai tendance à suivre l'exemple des grands acteurs sur ces sujets discutables.0 votes
Voici le w3 spec
0 votes
Les caractères réservés en HTML doivent être remplacés par des entités de caractères. Exemple de test sur ce sujet URL :
var element = document.evaluate('//table[@class="w3-table-all notranslate"]/tbody/tr[5]/td', window.document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null ).singleNodeValue; console.log('HTML:', element.innerHTML); var JS = (element.innerHTML).replace('&', '&'); console.log(JS);
4 votes
La spécification HTML dit qu'il faut accepter les entrées de merde. Est-ce que ça veut dire que votre site est "autorisé" à être merdique maintenant ? Fermez les balises qui doivent être fermées et échappez les choses ! Allez, les gens.
0 votes
Je m'échappe personnellement
&
si elle est attribuée via JavaScriptelement.innerHTML = '&'
ou assigné directement au HTML, mais il ne va pas provoquer une analyse incorrecte du HTML. Ce qui pose problème, ce sont les guillemets et les>
y<
. Si l'on attribueelement.value = "This isn't a problem. '<' & '>' is okay too!"
comme vous voulez le faire<input type='text' value='This isn't a problem. '<' & '>' is okay too!' />
. Vous n'avez pas besoin de le fermer vous-même ou de faire le&
..innerHTML
doivent être échappés comme du HTML brut. Avec JavaScriptelement.value =
il n'y a pas besoin.0 votes
Poste connexe - A quoi sert &.