web-dev-qa-db-fra.com

Caractères Unicode dans les URL

En 2010, proposeriez-vous des URL contenant des caractères UTF-8 dans un grand portail Web?

Les caractères Unicode sont interdits conformément à la RFC sur les URL (voir ici ). Ils devraient être codés en pourcentage pour être conformes aux normes.

Mon point principal, cependant, est de servir les caractères non codés dans le seul but de disposer d'URL d'apparence agréable, donc le pourcentage de codage est désactivé.

Tous les principaux navigateurs semblent bien analyser ces URL, peu importe ce que dit le RFC. Mon impression générale, cependant, est que cela devient très fragile lorsque nous quittons le domaine des navigateurs Web:

  • Les URLs sont copiées et collées dans des fichiers texte, des courriels et même des sites Web avec un codage différent
  • Bibliothèques client HTTP
  • Navigateurs exotiques, lecteurs RSS

Mon impression est-elle correcte que l'on doit s'attendre à des problèmes ici, et qu'il ne s'agit donc pas d'une solution pratique pour le moment si vous ciblez un public non technique et qu'il est important que tous vos liens fonctionnent correctement, même s'ils sont cités et transmis?

Existe-t-il un moyen magique de servir des URL de belle apparence 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-t-il correctement lorsqu'il est réutilisé sur des clients plus anciens?

131
Pekka 웃

Utilisez le codage en pourcentage. Les navigateurs modernes s’occupent des problèmes d’affichage et de collage et le rendent lisible par l’homme. Par exemple. http://ko.wikipedia.org/wiki/ 백과: 대문

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

119
Tgr

Ce qu'a dit Tgr. Contexte:

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

Ce n'est pas un URI. Mais il est un IRI .

Vous ne pouvez pas inclure un IRI dans un document HTML4; le type d'attributs comme href est défini en tant qu'URI et non IRI. De toute façon, certains navigateurs gèrent un IRI ici, mais ce n’est pas vraiment une bonne idée.

Pour coder un IRI dans un URI, prenez le chemin et les parties de la requête, UTF-8-les encoder, puis encodez les octets non-ASCII à un pourcentage:

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

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

Maintenant vous avez un URI. C'est un URI moche. Mais la plupart des navigateurs vont le cacher pour vous: copiez-le et collez-le dans la barre d'adresse ou suivez-le dans un lien et vous le verrez s'afficher avec les caractères Unicode d'origine. Wikipedia l'utilise depuis des années, par exemple:

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

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

...bon tu sais.

85
bobince

En fonction de votre schéma d'URL, vous pouvez rendre la partie codée UTF-8 "sans importance". Par exemple, si vous regardez les URL de débordement de pile, elles se présentent sous la forme suivante:

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

Cependant, le serveur ne s’inquiète pas réellement si vous obtenez la partie après l’identificateur erroné. Cela fonctionne donc également:

http://stackoverflow.com/questions/2742852/ は

Donc, si vous aviez une mise en page comme celle-ci, vous pourriez potentiellement utiliser UTF-8 dans la partie après l'identifiant et cela n'aurait pas vraiment d'importance si elle était tronquée. Bien sûr, cela ne fonctionne probablement que dans des circonstances quelque peu spécialisées ...

16
Dean Harding

Pas sûr que ce soit une bonne idée, mais comme mentionné dans d'autres commentaires et interprété, de nombreux caractères Unicode sont valides dans les URL HTML5 .

Par exemple, hrefdocs dire http://www.w3.org/TR/html5/links.html#attr-hyperlink-href :

L'attribut href sur un élément et area doit avoir une valeur qui est une URL valide potentiellement entourée d'espaces.

Ensuite, la définition de "URL valide" pointe vers http://url.spec.whatwg.org/ , qui définit les points de code d'URL comme:

ASCII alphanumérique, "!", "$", "&", "'", "(", ")", "*", "+", ",", "-", ".", "/" , ":", ";", "=", "?", "@", "_", "~" et des points de code dans les plages 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 à U + 10FFFD.

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

Si c n'est pas un point de code d'URL et pas "%", analyser l'erreur.

De plus, le validateur http://validator.w3.org/ transmet des URL telles que "你好", et ne passe pas pour les URL contenant des caractères tels que des espaces "a b"

Comme tous ces commentaires sont vrais, vous devriez noter que dans la mesure où ICANN autorisé les caractères arabes (persans) et chinois à être enregistrés en tant que nom de domaine, tous les fabricants de navigateurs (Microsoft, Mozilla, Apple, etc.) doivent prendre en charge les URL Unicode sans codage, et celles-ci doivent pouvoir être recherchées par Google, etc.

Donc, ce problème va résoudre dès que possible.

4
Nasser Hadjloo

Utilisez une forme codée en pourcentage . Certains ordinateurs (principalement anciens) fonctionnant sous Windows XP, par exemple, ne prennent pas en charge le codage Unicode, mais plutôt les codages ISO. C’est pour cette raison que les URL codées en pourcentage ont été inventées. papier à un utilisateur, contenant des caractères difficiles à taper, cet utilisateur peut avoir du mal à le taper (ou simplement l'ignorer). Il est même possible d'utiliser le formulaire à pourcentage pourcentage dans bon nombre des machines les plus anciennes ( ne supporte pas internet bien sûr).

Cependant, il y a un inconvénient, car les caractères encodés en pourcentage sont plus longs que ceux d'origine, ce qui peut entraîner de très longues URL. Mais essayez simplement de l'ignorer, ou utilisez un raccourcisseur d'URL (je recommanderais goo.gl dans ce cas, ce qui crée une URL longue de 13 caractères). De même, si vous ne souhaitez pas vous inscrire à un compte Google, essayez bit.ly (bit.ly crée des URL légèrement plus longues, avec une longueur de 14 caractères).

1
EKons

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 les liens sont maintenant affichés correctement:

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

Lien trouvé sur:

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

0
Peter Manoukian