Aller au contenu

Sujets conseillés

Posté

Sur le blog de Matt Cutt, je vois, dans le code source, des liens sous la forme suivante:

<a href="http://www.example.com/index.php?alpha=sud&#038;beta=nord">lien</a>

Cet utilisation de &#038; au lieu de & est-elle correcte ?

Jean-Luc

Posté

Merci pour ta réponse, mais je ne comprends pas pourquoi & n'est pas correct pour séparer des variables dans la query string. Je pensais que & était un caractère spécial réservé pour cet usage et que & devait être utilisé dans d'autres cas, par exemple à l'intérieur d'une variable:

<a href="http://www.example.com/index.php?alpha=you&me&beta=1234">blabla</a>

Ici j'utilise & pour séparer les variable alpha et beta et j'utilise & dans la valeur you&me de la variable alpha. Pas correct ?

Jean-Luc

Posté (modifié)

<a href="http://www.example.com/index.php?alpha=you%26me&beta=1234">blabla</a>

Si you&me est la valeur de ta variable, il ne faut pas lui signifier d'entité particulière, sa valeur est "you&me" et non "you&me", par contre il faut "URL encoder" dans le cadre d'un lien je pense.

(j'ai pas testé, me tape pas si ça fonctionne pas :P )

Modifié par SStephane
Posté (modifié)

Oui, & ou & sont non seulement autorisés dans les attributs, mais carrément obligatoires: un attribut HTML peut contenir des entités (&quelquechose;), ne serait-ce que pour pouvoir mettre un " (") à l'intérieur. Donc le "&" est le début d'une entité, donc il doit lui-même être échappé, et écrit & ou &. Sinon le browser va essayer de décoder ce qui suit le & comme étant le nom d'une entité. En général il ne va pas y arriver et interpréter ça comme un "&" quand même, mais si par hasard il y a vraiment le nom d'une entité derrière ça peut mal finir...

La procédure est simple:

- tu construis ton URL: les caractères non autorisés dans une URL seront URL-encodés (espaces remplacés par + ou %20, autres caractères non autorisés remplacés par %xx), en particulier les "composants" de l'URL (valeurs des paramètres) qui ne peuvent pas contenir de &, =, +, %, de caractères non-ASCII, etc.

- on obtient donc une URL, par exemple http://www.exemple.tld/truc?toto=machin+ch...tre+encod%c3%a9

- si tu veux la mettre dans un attribut d'une balise HTML (un HREF, un SRC, etc.), il faut ensuite encoder les caractères non autorisés et les remplacer par des entités. En particulier ", &, < et >: http://www.exemple.tld/truc?toto=machin+ch...tre+encod%c3%a9

En sens inverse, le browser va décoder les entités dans l'attribut pour reconstruire l'URL, puis le serveur web décodera les paramètres URL-encodés.

En clair: le & qui sépare les paramètres d'un URL n'est pas encodé *dans l'URL*, mais dans la représentation de l'URL dans un attribut HTML.

D'ailleurs une validation W3C ne réussira pas si les & ne sont pas correctement encodés.

Merci pour ta réponse, mais je ne comprends pas pourquoi & n'est pas correct pour séparer des variables dans la query string. Je pensais que & était un caractère spécial réservé pour cet usage et que & devait être utilisé dans d'autres cas, par exemple à l'intérieur d'une variable:
<a href="http://www.example.com/index.php?alpha=you&meβ=1234">blabla</a>

Ici j'utilise & pour séparer les variable alpha et beta et j'utilise & dans la valeur you&me de la variable alpha. Pas correct ?

Non: le & va être décodé par le browser, qui va donc obtenir l'URL http://www.example.com/index.php?alpha=you...eβ=1234. Et le serveur web va donc obtenir trois paramètres, alpha (= you), me (sans valeur), et beta (= 1234).

Jacques.

Modifié par jcaron
  • 2 months later...
Posté

Un grand merci (tardif) pour ta réponse particulièrement précise et claire. Je pense avoir bien compris tes explications, en particulier la différence entre URL et représentation de l'URL dans un attribut HTML (même si, dans ton message, le forum a converti automatiquement des #038; en &).

Un point reste encore mystérieux pour moi. Dans une variable de l'URL, tu écris le mot 'encodé' de cette manière 'encod%c3%a9'. Si je comprends bien, c'est parce que, pour l'urlencode, tu es parti d'UTF-8 et cela aurait donné 'encod%e9' en partant d'ISO-8859. L'essentiel est évidemment que le serveur comprenne. Les navigateurs que j'utilise convertissent automatiquement les caractères accentués présents dans l'URL, donc, dans la barre d'adresse, on pourrait écrire directement 'encodé' dans l'espoir que le navigateur convertisse en %..., mais comment le navigateur saura-t-il si cela doit être basé sur UTF-8 ou sur ISO-8859-1 ?

Jean-Luc

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...