À quoi sert & amp

108

Y a-t-il une différence de comportement de l'URL ci-dessous.

Je ne sais pas pourquoi le &est inséré, cela fait-il une différence?

www.testurl.com/test?param1=test&current=true

contre

www.testurl.com/test?param1=test&current=true
ciel bleu
la source
1
Connexes: Dois-je vraiment encoder en tant qu'ampli?
Charles Sprayberry
1
Pouvez-vous donner un contexte? Est-ce dans une action de forme? Juste affiché sur une page?
jprofitt
@ user470184 Je n'ai pas voté contre mais je l'ai considéré. Il y a déjà une tonne d'informations sur SO concernant ce problème.
Charles Sprayberry
«Comportement générique» est encore assez vague. Vous vous interrogez sur quelque chose comme <p>www.testurl.com/test?param1=test&amp;current=true</p>ou <a href="www.testurl.com/test?param1=test&amp;current=true">linky</a>?
jprofitt le
@ jprofitt <a href="www.testurl.com/test?param1=test&current=true"> linky </a>
blue-sky

Réponses:

126

& est HTML pour "Début d'une référence de caractère".

&amp; est la référence de caractère pour "Une esperluette".

&current; n'est pas une référence de caractère standard et est donc une erreur (les navigateurs peuvent essayer d'effectuer une récupération d'erreur, mais vous ne devriez pas en dépendre).

Si vous avez utilisé une référence de caractère pour un caractère réel (par exemple &trade;), il (™) apparaîtra dans l'URL au lieu de la chaîne souhaitée.

(Notez que selon la version de HTML que vous utilisez, vous devrez peut-être terminer une référence de caractère par un ;, c'est pourquoi &trade=sera traité comme ™. HTML 4 permet de l'omettre si le caractère suivant est un caractère non-mot ( comme =) mais certains navigateurs (Hello Internet Explorer) ont des problèmes avec cela).

Quentin
la source
5

Ma source: http://htmlhelp.com/tools/validator/problems.html#amp

Une autre erreur courante se produit lors de l'inclusion d'une URL contenant une esperluette ("&"):

Ceci est invalide:

a href = "foo.cgi? Chapter = 1 & section = 2 & copy = 3 & lang = en"

Explication:

Cet exemple génère une erreur pour "section d'entité inconnue" car le "&"est supposé commencer une référence d'entité. Les navigateurs récupèrent souvent en toute sécurité après ce type d'erreur, mais de vrais problèmes surviennent dans certains cas. Dans cet exemple, de nombreux navigateurs convertissent correctement & copy = 3 en © = 3, ce qui peut entraîner l'échec du lien. Puisque ⟨est l'entité HTML du crochet angulaire pointant vers la gauche, certains navigateurs convertissent également & lang = en en 〈= en. Et un ancien navigateur trouve même l'entité §, convertissant & section = 2 en §ion = 2.

L'objectif ici est donc d'éviter les problèmes lorsque vous essayez de valider votre site Web. Vous devriez donc remplacer votre esperluette par &amp;lorsque vous écrivez une URL dans votre balisage.

Notez que le remplacement &par &amp; n'est fait que lors de l'écriture de l'URL en HTML, où se "&"trouve un caractère spécial (avec "<" et ">"). Lorsque vous écrivez la même URL dans un message électronique en texte brut ou dans la barre d'adresse de votre navigateur, vous utiliseriez "&"et non "&amp;". Avec HTML, le navigateur se traduit par "&amp;"de "&"sorte que le serveur Web ne voit que "&" et non "&amp;"dans la chaîne de requête de la requête.

J'espère que cela t'aides : )

Jim
la source
0

C'est un excellent exemple. Quand &currentest analysé dans un nœud de texte, il est converti ¤t. Lorsqu'il est analysé dans une valeur d'attribut , il est analysé comme &current.

Si vous voulez &currentdans un nœud de texte, vous devez écrire &amp;currentdans votre balisage.

Les détails sanglants sont ici: http://dev.w3.org/html5/spec/tokenization.html#consume-a-character-reference

Alohci
la source
-2

si vous faites une chaîne de caractères. faire:

let linkGoogle = 'https://www.google.com/maps/dir/?api=1'; 
let origin = '&origin=' + locations[0][1] + ',' + locations[0][2];


aNav.href = linkGoogle + origin;
Urbanek Krzysztof
la source
1
La question concerne le &ampHTML, pas les &URL.
Quentin