Caractères Unicode dans les URLs

en 2010, est-ce que vous serviriez des URLs contenant des caractères UTF-8 dans un grand portail web?

Les caractères Unicodes

sont interdits selon la RFC sur les URLs (voir ici ). Il faudrait pour cent codé pour être conformes aux normes.

mon point principal, cependant, est de servir les caractères non codés dans le seul but d'avoir de belles URLs, donc le pourcentage d'encodage est sorti.

Tous les principaux navigateurs semblent pour analyser ces URLs OK peu importe ce que le RFC dit. Mon impression générale, cependant, est qu'il devient très Tremblant en quittant le domaine des navigateurs web:

  • Url de l'obtention de copie+collé dans les fichiers de texte, E-Mails, même à des sites Web avec un codage différent
  • bibliothèques clients HTTP
  • navigateurs exotiques, lecteurs RSS

est mon impression correcte qu'il faut s'attendre à des problèmes 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 cité et transmis?

y a-t-il une façon magique de servir de belles URLs en HTML

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

qui peut être copié+collé avec les caractères spéciaux intacts, mais fonctionne correctement quand réutilisé dans les clients plus âgés?

125
demandé sur Community 2010-04-30 11:07:54

7 réponses

utilise le pourcentage d'encodage. Les navigateurs modernes s'occuperont des problèmes de display & paste et les rendront lisibles par l'utilisateur. Par exemple: http://ko.wikipedia.org/wiki/위키백과:대문

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

113
répondu Tgr 2010-04-30 07:39:22

ce que Tgr a dit. Historique:

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

ce n'est pas une URI. Mais il est an IRI .

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

pour encoder une IRI dans une URI, prendre le chemin et les pièces de requête, UTF-8-encoder ensuite, ils encodent en pourcentage les octets non-ASCII:

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

S'il y a des caractères non-ASCII dans la partie nom d'hôte de L'IRI, par exemple: http://例え.テスト/ , ils ont été encodés en utilisant Punycode à la place.

Maintenant vous avez une URI. C'est une vilaine URI. Mais la plupart des navigateurs masquent cela pour vous: copiez et collez-le dans la barre d'adresse ou suivez-le dans un lien et vous le verrez affiché avec les caractères Unicode d'origine. Wikipedia ont été en utilisant ce depuis des années, par exemple.:

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

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

...eh bien, vous savez.

79
répondu bobince 2010-04-30 11:37:01

selon votre schéma D'URL, vous pouvez rendre la partie encodée UTF-8"sans importance". Par exemple, si vous regardez les URLs de débordement de pile, elles sont de la forme suivante:

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

cependant, le serveur ne se soucie pas réellement si vous obtenez la partie après l'identifiant erroné, donc cela fonctionne aussi:

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

donc si vous aviez une mise en page comme celle-ci, alors vous pourriez potentiellement utiliser UTF-8 dans la partie après l'identifiant et il ne serait pas vraiment importe si elle est déformée. Bien entendu, cela ne fonctionne probablement que dans des circonstances un peu particulières...

14
répondu Dean Harding 2015-08-18 11:01:22

pas sûr que ce soit une bonne idée, mais comme mentionné dans d'autres commentaires et comme je l'interprète, beaucoup de caractères Unicode sont valides dans les URLs HTML5 .

par exemple, href docs say http://www.w3.org/TR/html5/links.html#attr-hyperlink-href :

l'attribut href sur les éléments A et area doit avoir une valeur qui est une URL valide potentiellement entourée d'espaces.

puis la définition de "VALIDE URL" pointe sur http://url.spec.whatwg.org / , qui définit points de code URL comme:

ASCII alphanumérique,"!", "$", "&", "'", "(", ")", "*", "+", ",", "-", ".", "/", ":", ";", "=", "?", "@", "_", "~", 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 to U+5FFFD, U+60000 to U+6FFFD, U+70000 to U+7FFFD, U+80000 to U+8FFFD, U+90000 to U+9FFFD, U+A0000 to U+AFFFD, U+B0000 to U+BFFFD, U+C0000 to U+CFFFD, U+D0000 to U+DFFFD, U+E1000 to U+EFFFD, U+F0000 to U+ffffd, U+100000 to U+10FFFD.

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

si c n'est pas un point de code URL et pas"%", erreur d'analyse.

aussi le validateur http://validator.w3.org / passe pour les URLs comme "你好" , et ne passe pas pour les URLs avec des caractères comme les espaces "a b"

4

comme tous ces commentaires sont véridiques, vous devez noter que dans la mesure où ICANN approuvé caractères arabes (persans) et Chinois à enregistrer comme nom de domaine, Toutes les sociétés de fabrication de navigateur (Microsoft, Mozilla, Apple, etc.) doivent prendre en charge Unicode dans les URLs sans aucun encodage, et ceux-ci doivent être consultables par Google, etc.

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

3
répondu Nasser Hadjloo 2014-01-23 12:40:09

utiliser la forme codée en pourcentage . Certains ordinateurs (principalement anciens) exécutant Windows XP par exemple ne prennent pas en charge Unicode, mais plutôt des encodages ISO. C'est la raison pour laquelle les URL encodées en pourcentage ont été inventées. En outre, si vous donnez une URL imprimée sur papier à un utilisateur, contenant des caractères qui ne peuvent pas être facilement dactylographiés, cet utilisateur peut avoir de la difficulté à la taper (ou tout simplement l'ignorer). La forme encodée en pourcentage peut même être utilisée dans beaucoup des machines les plus anciennes qui aient jamais existé (bien qu'elles ne supportent pas d'internet bien sûr).

il y a cependant un inconvénient, car les caractères encodés en pourcentage sont plus longs que les caractères originaux, ce qui peut donner de très longues URLs. Mais essayez de l'ignorer, ou utilisez un raccourci D'URL (je recommande goo.gl dans ce cas, ce qui fait une URL longue de 13 caractères). En outre, si vous ne voulez pas vous inscrire pour un compte Google, essayez bit.ly (bit.Ly fait des URLs légèrement plus longues, avec le longueur 14 caractères).

1
répondu EKons 2015-11-18 13:11:03

pour moi c'est la bonne façon, cela vient de fonctionner:

    $linker = rawurldecode("$link");
    <a href="<?php echo $link;?>"   target="_blank"><?php echo $linker ;?></a>

cela a fonctionné, et maintenant les liens sont affichés correctement:

http://newspaper.annahar.com/article/121638 - معرض--حوزف-حرب-في-شاليري-شانين-ربيز-لوحاته-الجدية-تبحث-وتكتشف-وتفرض-الاحترام

lien trouvé sur:

http://www.galeriejaninerubeiz.com/newsite/news

0
répondu Peter Manoukian 2014-09-03 08:44:47