156 votes

Caractères Unicode dans les URL

En 2010, voulez-vous servir des Url contenant des caractères UTF-8 dans un grand portail web?

Les caractères Unicode sont interdites par la RFC sur les Url (voir ici). Il faudrait pour cent codé pour être conformes aux normes.

Mon point principal, cependant, est de servir le clair de caractères pour le seul but d'avoir de jolies URLs, donc pour cent de l'encodage.

Tous les principaux navigateurs semblent être l'analyse de ces Url d'accord quelle que soit la RFC dit. Mon impression générale, cependant, est qu'il devient très fragile au moment de quitter le domaine des navigateurs web:

  • Url arriver copie+collé dans les fichiers de texte, E-Mails, même à des sites Web avec un codage différent
  • Client HTTP bibliothèques
  • Exotiques navigateurs, lecteurs de flux RSS

Est mon impression correcte que la difficulté est attendue d'ici, et donc ce n'est pas une solution pratique (encore) si vous servez un public non technique et il est important que tous vos liens fonctionnent correctement, même si la cité et transmis?

Est-il un peu de magie dans sa manière de servir de jolies Url dans le HTML

http://www.example.com/düsseldorf?neighbourhood=Lörick

qui peut être la copie+collé avec les caractères spéciaux intacte, mais le travail correctement lors de la ré-utilisé dans les anciens clients?

145voto

Tgr Points 11766

Utiliser l’encodage pour cent. Les navigateurs modernes seront prendre soin d’affichage & coller les questions et rendre lisible par l’homme. E. g. http://ko.wikipedia.org/wiki/ 위키백과 : 대문

Edit : lorsque vous copiez une url dans Firefox, le presse-papiers tiendra la forme encodés en pourcentage (qui est généralement une bonne chose), mais si vous copiez une partie seulement de celui-ci, il restera non codée.

99voto

bobince Points 270740

Ce Tgr dit. Arrière-plan:

http://www.example.com/düsseldorf?neighbourhood=Lörick

Ce n'est pas une URI. Mais c' est un IRI.

Vous ne pouvez pas inclure un IRI dans un HTML4 document; le type d'attributs comme href est défini comme URI et pas de l'IRI. Certains navigateurs gérer un IRI ici de toute façon, mais ce n'est pas vraiment une bonne idée.

Pour coder un IRI en URI, prendre le chemin de requête et les pièces, UTF-8-encoder ensuite pour cent-encoder le non-octets ASCII:

http://www.example.com/d%C3%BCsseldorf?neighbourhood=L%C3%B6rick

Si il y a des caractères non-ASCII dans le nom d'hôte de la partie de l'IRI, par exemple. http://例え.テスト/, ils ont être codé à l'aide de Punycode à la place.

Maintenant, vous avez une URI. C'est un vilain URI. Mais la plupart des navigateurs vous cacher que pour vous: copier et coller dans la barre d'adresse ou de suivre un lien et vous verrez qu'il affiche à l'origine des caractères Unicode. Wikipedia ont été en utilisant ce depuis des années, par exemple.:

http://en.wikipedia.org/wiki/ɸ

L'un navigateur dont le comportement est imprévisible et n'affiche toujours pas la jolie IRI version est...

...eh bien, vous savez.

22voto

Dean Harding Points 40164

En fonction de votre schéma d'URL, vous pouvez faire de l'UTF-8 de la partie "pas important". Par exemple, si vous regardez Débordement de Pile dans l'Url, ils sont de la forme suivante:

http://stackoverflow.com/questions/2742852/unicode-characters-in-urls

Toutefois, le serveur ne fait pas de soins si vous obtenez la partie après l'identificateur de mal, alors, cela fonctionne aussi:

http://stackoverflow.com/questions/2742852/これは、これを日本人のテキストです

Donc, si vous avez eu une mise en page comme ceci, alors vous pouvez éventuellement utiliser de l'UTF-8 dans la partie après l'identificateur et il n'a pas vraiment d'importance si elle est déformée. Bien sûr, c'est probablement ce qui ne fonctionne que dans un peu spécialisés circonstances...

8voto

Ciro Santilli Points 3341

Pas sûr si c'est une bonne idée, mais comme mentionné dans d'autres commentaires, et comme je l'interpréter, de nombreux caractères Unicode sont valide en HTML5 Url.

E. g., href docs dire http://www.w3.org/TR/html5/links.html#attr-hyperlink-href:

L'attribut href pour un et les éléments de la zone doit avoir une valeur qui est une URL valide potentiellement entouré par des espaces.

Alors, la définition de "URL valide" points de http://url.spec.whatwg.org/, qui définit l'URL de points de code comme:

Alphanumériques ASCII, "!", "$", "&", "'", "(", ")", "*", "+", ",", "-", ".", "/", ":", ";", "=", "?", "@", "_", "~", et les points de code dans les gammes U+00A0 à U+D7FF, U+E000 à U+FDCF, U+FDF0 à U+FFFD, U+10000 à U+1FFFD, U+20000 à U+2FFFD, U+30000 à U+3FFFD, U+40000 à U+4FFFD, U+50000 à U+5FFFD, U+60000 à U+6FFFD, U+70000 à U+7FFFD, U+80000 à U+8FFFD, U+90000 à U+9FFFD, U+A0000 à U+AFFFD, U+B0000 à U+BFFFD, U+C0000 à U+CFFFD, U+D0000 à U+DFFFD, U+E1000 à U+EFFFD, U+F0000 à U+FFFFD, U+100000 pour U+10FFFD.

Le terme "URL points de code" est alors utilisé que dans quelques parties de l'algorithme d'analyse, par exemple pour le chemin relatif de l'état:

Si c n'est pas une URL de point de code et non "%", erreur d'analyse.

Aussi le validateur http://validator.w3.org/ passe par des URLs comme "你好", et ne passent pas pour des Url avec des personnages comme les espaces "a b"

6voto

Nasser Hadjloo Points 4781

Que tous ces commentaires sont remplies, que vous devez noter que dans la mesure que l’ICANN a approuvé arabe (persan) et les caractères chinois d’être enregistré comme nom de domaine, toutes les entreprises de fabrication de navigateur (Mozilla, Apple, Microsoft, etc.) doivent prendre en charge Unicode dans les URL sans n’importe quel encodage et ceux qui devraient être consultables par Google, etc..

Donc cette question va résoudre dès que possible.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X