Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

urls : ascii ou plus ?

17 réponses
Avatar
mpg
Bonjour,

Peut-on ou pas utiliser des caractères non ascii dans la valeur de
l'attribut href en html ? Tidy semble les considérer comme légaux mais
seulement s'il sont « échappés » (par exemple %C3%A9 pour un « é » dans un
document encodé en utf-8). La seule référence que je trouve à ce sujet (RFC
1738) dit que le non-ascii n'est pas autorisé, mais cette RFC date de 94.
Enfin, wikipedia a souvent plein de caractères accentués dans les noms de
pages, pour l'instant je ne leur ai jamais accordé de traitement
particulier dans mes pages, et sans rencontrer de problème mais ça ne
prouve rien.

Alors, quelles sont les bonnes pratiques et les standards en la matière ?

Merci,
Manuel.

7 réponses

1 2
Avatar
Paul Gaborit
À (at) Mon, 13 Oct 2008 16:49:35 +0200,
Olivier Miakinen <om+ écrivait (wrote):
Le 13/10/2008 13:14, Pierre Goiffon a écrit :

Le passage de caractères hors us-ascii est à priori assez problématique :
rien n'indique en effet dans l'échange entre client et serveur sur
quel codage est basé l'échappement ! On a donc tendance à préférer le
post, ou au moins à forcer UTF-8...

Voir ce document de référence sur le sujet :
<http://web.archive.org/web/20060427015200/ppewww.ph.gla.ac.uk/~flavell/charset/form-i18n.html>



C'est vrai, mais ceci ne concerne que les paramètres qui pourraient être
éventuellement passés dans un formulaire plutôt que dans l'URL. Utiliser
un POST ne résoudra rien dans le cas où la page appelée se nomme
http:///www.example.com/écrire.php

En revanche, vu que cette partie est statique, il n'y a aucun problème à
référencer <a href="http:///www.example.com/%C3%A9crire.php">.



Certainement mais rien dans la RFC sur les URI ne permet de dire si
l'URL cité ci-dessus référence un fichier nommé Écrire.php !

Pour bien comprendre les différents niveaux d'interprétation, il faut
lire la section 2.5 de la RFC 3986. Les exemples donnés sont assez
parlants.

--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Avatar
Paul Gaborit
À (at) Mon, 13 Oct 2008 17:08:40 +0200,
Paul Gaborit écrivait (wrote):
[...]
l'URL cité ci-dessus référence un fichier nommé Écrire.php !


[...]

Problément d'encodage ! Je voulais écrire "écrire.php" ! ;-)


--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Avatar
Olivier Miakinen
Le 13/10/2008 17:08, Paul Gaborit a écrit :

En revanche, vu que cette partie est statique, il n'y a aucun problème à
référencer <a href="http:///www.example.com/%C3%A9crire.php">.



Certainement mais rien dans la RFC sur les URI ne permet de dire si
l'URL cité ci-dessus référence un fichier nommé Écrire.php !



C'est absolument exact. Mais d'un autre côté on s'en fiche complètement,
non ? Avec une telle URI, il pourrait tout aussi bien s'appeler en
local écrire.php, ├®crire.php ou √©crire.php (exemples non fictifs,
j'ai choisi l'interprétation selon trois encodages utilisés pour écrire
le français).

Pour bien comprendre les différents niveaux d'interprétation, il faut
lire la section 2.5 de la RFC 3986. Les exemples donnés sont assez
parlants.



Oui.
Avatar
mpg
Le (on) lundi 13 octobre 2008 17:20, Olivier Miakinen a écrit (wrote) :

Le 13/10/2008 17:08, Paul Gaborit a écrit :

En revanche, vu que cette partie est statique, il n'y a aucun problème à
référencer <a href="http:///www.example.com/%C3%A9crire.php">.



Certainement mais rien dans la RFC sur les URI ne permet de dire si
l'URL cité ci-dessus référence un fichier nommé Écrire.php !



C'est absolument exact. Mais d'un autre côté on s'en fiche complètement,
non ?



Euh, justement, je ne comprends pas pourquoi, et l'argument ci-dessus me
fait justement penser que non, on ne s'en fiche pas.

Avec une telle URI, il pourrait tout aussi bien s'appeler en
local écrire.php, ?®crire.php ou ?©crire.php (exemples non fictifs,
j'ai choisi l'interprétation selon trois encodages utilisés pour écrire
le français).



Ou alors on s'en fiche juste quand on écrit le lien, mais on commence à
arrêter de s'en ficher quand on est côté serveur et qu'il faut associer un
vrai fichier à l'URI demandé par le client ?

Pour bien comprendre les différents niveaux d'interprétation, il faut
lire la section 2.5 de la RFC 3986. Les exemples donnés sont assez
parlants.



Oui.



Je vais aller les lire alors.

Merci à tous pour vos réponses,
Manuel.
Avatar
Paul Gaborit
À (at) Tue, 14 Oct 2008 00:59:34 +0200,
mpg écrivait (wrote):
Ou alors on s'en fiche juste quand on écrit le lien, mais on commence à
arrêter de s'en ficher quand on est côté serveur et qu'il faut associer un
vrai fichier à l'URI demandé par le client ?



En fait, c'est au serveur de se débrouiller avec la suite d'octets
qu'il récupère. Libre à lui de l'interpréter comme il le
souhaite. D'ailleurs, rien ne dit qu'il y a un fichier au bout... ;-)

En fait, on est un peu dans la situation inverse des systèmes de
fichiers. De nombreux systèmes de fichiers ne considèrent pas
l'encodage des noms de fichiers : ils interdisent juste quelques
caractères (par exemple / et NUL) et le reste, ils ne s'en préoccupent
pas (si ce n'est peut-être la longueur totale). Après, les couches
au-dessus décident si telle ou telle suite d'octets doit apparaître
comme un caractère accentué, un idéogramme ou juste de l'ascii...

--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Avatar
Olivier Miakinen
Le 14/10/2008 00:59, mpg a écrit :

Euh, justement, je ne comprends pas pourquoi, et l'argument ci-dessus me
fait justement penser que non, on ne s'en fiche pas.

Avec une telle URI, il pourrait tout aussi bien s'appeler en
local écrire.php, ?®crire.php ou ?©crire.php (exemples non fictifs,
j'ai choisi l'interprétation selon trois encodages utilisés pour écrire
le français).



Ou alors on s'en fiche juste quand on écrit le lien, mais on commence à
arrêter de s'en ficher quand on est côté serveur et qu'il faut associer un
vrai fichier à l'URI demandé par le client ?



C'est parce qu'on prend la question du mauvais côté. C'est du côté
serveur que l'on définit la forme des URL, que ce soient celles écrites
dans les liens <a href...> ou bien celles attendues en réponse.

Ainsi, pour un fichier qui se nomme écrire.php dans le jeu de caractères
par défaut de la machine, c'est le webmestre qui décide s'il veut que
l'URL correspondante contienne %C3%A9crire.php ou %E9crire.php, voire
%82crire.php ou encore %CB%83%99%89%99%85K%97%88%97 (le dernier exemple
est de l'EBCDIC).

Bien sûr, choisir autre chose que la conversion en UTF-8 empêche de
taper directement la chaîne avec accents dans l'URL et de voir son
navigateur favori la traduire tout seul comme un grand, mais ça c'est
vraiment au choix du webmestre.
Avatar
Pierre Goiffon
Olivier Miakinen wrote:
C'est du côté
serveur que l'on définit la forme des URL, que ce soient celles écrites
dans les liens <a href...> ou bien celles attendues en réponse.

Ainsi, pour un fichier qui se nomme écrire.php dans le jeu de caractères
par défaut de la machine, c'est le webmestre qui décide s'il veut que
l'URL correspondante contienne %C3%A9crire.php ou %E9crire.php, voire
%82crire.php ou encore %CB%83%99%89%99%85K%97%88%97 (le dernier exemple
est de l'EBCDIC).



Certes...

Au passage, j'imagine le cas de migration d'un serveur qui hébergeait
des url contenant des caractères échappés, mettons en windows-1252. Et
on passe sur un système où le codage par défaut est UTF-8. Existe-t-il
des quelconques techniques permettant de forcer sur le serveur
l'échappement des url avec un codage déterminé qui serait différent de
la plateforme ? Sur tomcat on a un UriEncoding qui je crois fait un peu ça ?
1 2