Ai-je vraiment besoin de coder "& "" &'?
Je suis en utilisant un &
symbole avec HTML5 et UTF-8 dans mon site <title>
. Google montre l'esperluette amende à ses SERPs, comme le font tous les navigateurs dans leurs titres.
http://validator.w3.org me donne ceci:
& ne commencez pas un caractère de référence. (& aurait probablement pu échappé que
&
.)
Dois-je vraiment besoin de le faire &
?
Je ne suis pas embêté sur mes pages de validation pour l'amour de la validation, mais je suis curieux d'entendre l'opinion des gens sur ce sujet et si c'est important et pourquoi.
- Les specs ne le dites pas. L'affiche fait référence à HTML5 qui ne nécessite pas de s'échapper de l'esperluette dans tous les scénarios.
- Ce doit être de la Communauté Wiki, que vous êtes à la recherche d'avis, et de ne pas être pointilleux sur la validation implique qu'il n'y a pas de base objective sur laquelle répondre.
- vraiment? Même si je ne suis pas d'accord que "la validation n'a pas d'importance", je vois cela comme un objectif de la question: "est-ce à casser autre chose que la spec?"
- Sauer - Votre exemple est une bonne question... c'est pas ce que la question est bien 😛 Les mots exacts "je suis curieux d'entendre l'opinion des gens" apparaît même pas dans le texte!
- Je suis en désaccord ici. "Ai-je vraiment besoin de le faire
&
?" et "[...] je suis curieux d'entendre l'opinion des gens sur ce et si c'est important et pourquoi." (l'emphase est mienne). Ces deux indiquent qu'il est intéressé par des informations factuelles, mais il sait que beaucoup de celui-ci est ouvert à au moins une certaine interprétation, de sorte qu'il lui demande les opinions multiples. - Sauer - C'est vrai. Je reconnais la validité de votre avis... mais en tiens à ma propre ainsi 😉
- juste assez 😉
- les navigateurs web Actuels font de grands efforts pour comprendre l'utilisateur. Et donc, est-ce que Google. Il fait partie de la spécification. Avenir web, les navigateurs peuvent être moins indulgent. Donc, il est toujours une bonne idée de vérifier comment Wikipédia t-il, et de les copier.
- Lors de la transformation xslt xml de html, il n'échappera pas & par & dans les valeurs d'attribut.
- C'est une bonne approche: voir comment wikipédia n'
- Google lui-même utilise
&
dans href url. Voir la source sur google.com ou plus.google.com j'ai tendance à suivre l'exemple des grands acteurs sur ces sujets douteux - Voici le w3 spec
- les caractères Réservés dans le HTML doit être remplacé par des entités de caractères. Exemple de Test sur ce 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);
- La spécification HTML dit d'accepter la merde d'entrée. Est-ce à dire que votre site est "autorisé" à être de la merde maintenant? Fermer les balises doivent être fermées et d'échapper à des choses! Venez sur les gens.
Vous devez vous connecter pour publier un commentaire.
Oui. Tout comme l'erreur dit, dans le langage HTML, les attributs #PCDATA sens qu'ils sont analysées. Cela signifie que vous pouvez utiliser les entités de caractères dans les attributs. À l'aide de
&
par elle-même est mauvaise et si ce n'est pour clémente navigateurs et le fait que c'est le HTML pas de XHTML, de casser l'analyse. Simplement échapper que&
et tout irait bien.HTML5 vous permet de le laisser sans échappement, mais uniquement lorsque les données suivantes ne ressemble pas à un caractère valide de référence. Cependant, il vaut mieux juste pour échapper à toutes les occurrences de ce symbole que de s'inquiéter au sujet de ceux qui devraient l'être et ceux qui n'en ont pas besoin pour être.
Garder ce point à l'esprit; si vous n'êtes pas échapper & &, il est assez mauvais pour les données que vous créez (où le code pourrait très bien être non valide), vous risquez également de ne pas échapper tag délimiteurs, qui est un énorme problème pour l'utilisateur, les données soumises, ce qui pourrait très bien conduire à HTML et à l'injection de scripts, cookie le vol et d'autres exploits.
Veuillez juste d'échapper à votre code. Il vous permettra d'économiser beaucoup d'ennuis dans l'avenir.
preg_replace('/&/','&',$code);
<a href="http://www.google.com/search?q=foo§=bar">foo§=bar</a>
.©=3
"look" comme une entité valide que©
est défini. Selon HTML5, ce genre de chose certainement doit être échappé.&asldfj=4
ne ressemble pas à une référence définie, de sorte qu'il n'est pas besoin, mais doivent être échappés de toute façon pour des raisons que j'ai énoncé ci-dessus dans ma réponse.Validation de côté, le fait demeure que l'encodage de certains personnages est importante pour un document HTML afin qu'il puisse s'afficher correctement et en toute sécurité en tant que page web.
Encodage
&
comme&
dans tous les cas, pour moi, c'est plus facile une règle de vie, la réduction de la probabilité d'erreurs et d'échecs.Comparer les suivantes: quel est le plus facile? ce qui est plus facile à bugger jusqu'?
Méthodologie 1
Méthodologie 2
(avec un grain de sel, s'il vous plaît 😉 )
volt & amp
> Dans ce cas, ne vous embêtez pas à l'encodage.
amp&volt
> Dans ce cas, ne vous embêtez pas à l'encodage.
volt&
> Encoder.
??
amp&volt
est ambigu: Est&volt
maintenant une entité de référence ou pas?amp&volt
est pas ambigu esperluette (selon la définition dans la spécification HTML). Voir mathiasbynens.être/notes/ambigu-commercial et mothereff.dans la/les signes & #amp%26volt.J'ai fait des recherches de fond et écrit à propos de mes découvertes ici: http://mathiasbynens.be/notes/ambiguous-ampersands
J'ai également créé un outil en ligne que vous pouvez utiliser pour vérifier votre balisage ambiguës et commercial ou des références à des caractères qui ne se terminent pas par un point-virgule, les deux qui ne sont pas valides. (Pas de HTML validator actuellement fait cela correctement.)
&
tant qu'il n'est pas ressembler à un attribut de l'expression. - Ce vraiment efface les choses pour moi. Personnellement. La spec HTML5 va sortir de sa façon de faire de HTML facile à écrire, en poussant le difficile travail d'interprétation pour le navigateur, qui à mon avis est un bon moyen de contourner pour qu'il soit. Allés sont les jours de la syntaxe stricte XHTML, et c'est une bonne chose.HTML5 règles sont différentes de HTML4. Il n'est pas nécessaire en HTML5 - à moins que l'esperluette dirait qu'il commence un nom de paramètre. "©=2" est encore un problème, par exemple, car © est le symbole du droit d'auteur.
Cependant il me semble que c'est plus difficile de décider de coder ou de ne pas coder selon le texte suivant. Donc le plus simple est probablement d'encoder tous les temps.
©=2
n'est pas aussi grand d'un problème que vous pouvez penser. Dans les valeurs d'attribut (par exemple, lahref
attribut), le©
ne sera pas considéré comme un personnage de référence pour©
. En dehors de la valeur d'un attribut, il le ferait.Je pense que cela a tourné dans plus d'une question de "pourquoi suivre les spécifications lorsque le navigateur ne fait pas de soins." Voici ma réponse générale:
Normes ne sont pas un "cadeau" de la chose. Ils sont un "futur" de la chose. Si nous, en tant que développeurs, suivre les standards du web, puis les fournisseurs de navigateur sont plus susceptibles de mettre correctement en œuvre de ces normes, et nous nous rapprochons d'une complètement interopérable web, où les hacks CSS, la détection de fonctionnalité, et la détection du navigateur ne sont pas nécessaires. Où nous n'avons pas à comprendre pourquoi nos mises en pause dans un navigateur particulier, ou comment travailler autour de cela.
Plus précisément, si le HTML5 ne nécessite pas l'utilisation de &, dans votre situation, et vous êtes à l'aide d'un doctype HTML5 (et aussi attendre vos utilisateurs à l'aide de HTML5 compatible navigateurs), alors il n'y a pas de raison de le faire.
Bien, si il s'agit de la saisie de l'utilisateur alors oui, absolument, pour des raisons évidentes. Pense que si ce site n'est pas: le titre de cette question apparaîtra comme ai-je vraiment besoin de coder "& "" &’?
Si c'est juste quelque chose comme
echo '<title>Dolce & Gabbana</title>';
alors, strictement parlant, vous n'avez pas à. Il serait mieux, mais si vous n'avez pas aucun utilisateur ne remarquera la différence.Pourriez-vous nous montrer ce que votre
title
est réellement? Quand je soumettreà http://validator.w3.org/ - explicitement demandé à l'utilisation expérimentale HTML 5 mode - il n'a pas de plaintes au sujet de la
&
s...<title>Dolce & Gabbana</title>
et<p>Dolce & Gabbana</p>
sont valides HTML 2.0.En HTML un
&
marque le début d'une référence, d'un référence de caractère ou d'un entité de référence. À partir de ce moment, l'analyseur attend un#
dénotant un caractère de référence, ou d'une entité nom dénotant une entité de référence, à la fois suivi par un;
. C'est le comportement normal.Mais si le nom de la référence ou tout simplement la référence de l'ouverture
&
est suivie par un espace blanc ou d'autres délimiteurs comme"
,'
,<
,>
,&
, la fin;
et même une référence pour représenter une plaine&
peut être omis:Seulement dans ces cas la fin
;
ou même la référence elle-même peut être omis (au moins dans le HTML 4). Je pense que le HTML 5 exige la fin;
.Mais la spécification recommande de toujours utiliser une référence de la référence de caractère
&
ou de l'entité de référence&
pour éviter toute confusion:Si l'utilisateur passe pour vous, ou il aura du vent dans une URL, vous devez vous échapper.
Si elle apparaît dans le texte statique sur une page? Tous les navigateurs obtenir ce droit-là de toute façon, vous n'avez pas à vous soucier de lui, car il fonctionne.
Oui, vous devriez essayer de servir le code est valide si possible.
La plupart des navigateurs en silence à corriger cette erreur, mais il y a un problème en se basant sur la gestion d'erreur dans les navigateurs. Il n'y a pas de norme pour la façon de gérer le code incorrect, donc c'est à chaque navigateur vendeur pour essayer de comprendre quoi faire avec chacun d'erreur, et les résultats peuvent varier.
Quelques exemples où les navigateurs sont susceptibles de réagir différemment, si vous placez des éléments à l'intérieur d'un tableau, mais à l'extérieur des cellules de tableau, ou si vous imbriquez des liens à l'intérieur les uns des autres.
Pour votre exemple, il n'est pas susceptible de causer des problèmes, mais la correction de l'erreur dans le navigateur, par exemple, peut provoquer le navigateur pour changer de normes conformes à la mode en mode quirks, ce qui pourrait rendre votre disposition briser complètement.
Donc, vous devez corriger les erreurs de ce type dans le code, si ce n'est pour autre chose, afin de maintenir la liste des erreurs dans le programme de validation court, de sorte que vous pouvez repérer les problèmes plus graves.
Il y A quelques années, nous avons reçu un rapport que l'une de nos applications web n'affiche pas correctement dans Firefox. Il s'est avéré que la page contient une balise qui ressemblait
Lorsqu'ils sont confrontés à un nouvel attribut de style, c'est à dire combiner les deux styles, tandis que Firefox utilise uniquement l'un d'entre eux, d'où le comportement différent. J'ai modifié le tag de
et bien sûr, il a résolu le problème! La morale de l'histoire est que les navigateurs ont plus cohérente de la manipulation de code HTML valide que du HTML non valide. Donc, fixer votre putain de balisage déjà! (Ou utiliser le HTML Tidy pour le fixer.)
J'ai été vérifier pourquoi l'URL de l'Image, de son besoin d'évasion, d'où il a essayé de https://validator.w3.org. L'explication est assez agréable. Il met en évidence que même les URL doivent être échappés. [PS:je pense que ce sera sans échappement lors de sa consommé depuis l'URL du besoin
&
. Quelqu'un peut-il préciser?]&
commence une entité de référence. Après la lecture de&qux
, l'analyseur ne trouve pas de point-virgule final (;
), mais se heurte à un signe égal (=
), qui ne peut être une partie du nom de l'entité. Ce devrait être l'erreur d'analyse, si l'analyseur a essayé d'être très strict (selon le HTML 4). En HTML 5, les entités d'analyse est globalement de plus en plus détendu.;
comme séparateur dans les chaînes de requête (lorsque vous contrôlez le lien) pour cette raison.si
&
est utilisé dans html alors vous devriez échapperSi
&
est utilisé dans les chaînes de caractères javascript par exemple, unalert('This & that');
ou d'un document.href vous n'avez pas besoin de l'utiliser.Si vous êtes à l'aide de document.écrire, alors vous devriez utiliser par exemple
document.write(<p>this & that</p>)
document.write
doit être évitée. Voir la boîte de dialogue d'avertissement dans w3.org/html/wg/drafts/html/master/dom.html#document.write%28%29document.write()
. Mais le point d'Alex est à faire sur l'écriture du document à partir d'un script de stands, de l'omi. +1Il dépend de la probabilité d'un point-virgule de se retrouver à proximité de votre
&
, à l'origine pour afficher quelque chose de tout à fait différent.Par exemple, lorsque vous traitez avec les données des utilisateurs (par exemple, si vous incluez l'utilisateur fourni objet d'un post sur le forum dans vos balises de titre), vous ne savez jamais où ils pourraient mettre aléatoire des points-virgules, et il peut aléatoirement affichage d'étranges entités. Il faut donc toujours s'échapper dans cette situation.
Pour votre propre html statique, sûr, vous ne pouvais l'ignorer, mais c'est tellement trivial pour être correctement s'échapper, qu'il n'y a pas de bonne raison pour l'éviter.
Si que vous parlez vraiment le texte statique
stockées dans un fichier sur le disque dur et servis directement par un serveur, alors oui: il n'a probablement pas besoin d'être échappé.
Cependant, puisqu'il n'est très peu de contenu HTML, aujourd'hui c'est complètement statique, je vais ajouter l'avertissement suivant qui suppose que le contenu HTML est généré à partir d'une autre source de données (base de données de contenu, la saisie de l'utilisateur, web service résultat de l'appel, l'héritage de l'API de résultat, ...):
Si vous n'échapperez pas à un simple
&
, alors les chances sont vous n'avez pas échapper à une&
ou un
ou<b>
ou<script src="http://attacker.com/evil.js">
ou de tout autre invalide texte. Cela voudrait dire que vous êtes au mieux de l'affichage de votre contenu à tort et à plus de chances sont sensibles aux Les attaques XSS.En d'autres termes: lorsque vous êtes déjà vérification et d'échapper à l'autre de plus en plus problématique, alors il n'y a presque pas de raison de quitter le pas-totalement-cassé-mais-encore-un peu-poisson autonome-& sans échappement.
ne sais pas si c'est utile à quelqu'un... je me battais depuis un certain temps... voici une glorieuse regex vous pouvez utiliser pour résoudre tous vos liens, le javascript, le contenu. J'ai eu à traiter avec une tonne de contenu hérité que personne ne voulait corriger.
Ajouter à votre Rendu remplacer dans votre page maître ou de contrôle:
Merci de ne pas la flamme moi pour la mise au mauvais endroit:
Le lien a un assez bon exemple de quand et pourquoi vous avez peut-être besoin d'échapper à
&
à&
https://jsfiddle.net/vh2h7usk/1/
Fait intéressant, j'ai dû fuir le personnage afin de représenter correctement dans ma réponse ici. Si je devais utiliser le haut-exemple de code option (à partir de la réponse du panneau), je viens de taper dans
&
et il semble comme il se doit. Mais si je devais manuellement utilisation de la<code></code>
élément, puis-je avoir à s'échapper afin de représenter correctement 🙂