Символы Unicode в URL

В 2010 Вы служили бы URL, содержащим символы UTF-8 в большом веб-портале?

Символы Unicode запрещаются согласно RFC на URL (см. здесь). Они должны были бы быть процентом, закодированным, чтобы быть совместимыми стандартами.

Мой основной момент, тем не менее, служит незакодированным символам для единственной цели наличия привлекательных URL, таким образом, кодирование процента отсутствует.

Все главные браузеры, кажется, анализируют те URL хорошо независимо от того, что говорит RFC. Мое общее впечатление, тем не менее, - то, что это становится очень шатким при отъезде домена веб-браузеров:

  • URL, добирающиеся copy+pasted в текстовые файлы, электронные письма, даже веб-сайты с другим кодированием
  • Библиотеки HTTP Client
  • Экзотические браузеры, RSS-ридеры

Мое впечатление корректно, что проблема должна ожидаться здесь, и таким образом это (еще) не практическое решение, если Вы служите нетехнической аудитории, и важно, чтобы все Ваши ссылки работали правильно даже если заключенный в кавычки и переданный?

Есть ли некоторый волшебный способ служить привлекательным URL в HTML

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

это может быть copy+pasted с неповрежденными специальными символами, но работать правильно когда снова использованный в клиентах старшего возраста?

133
задан Community 23 May 2017 в 12:18
поделиться

4 ответа

Используйте процентную кодировку. Современные браузеры позаботятся о проблемах с отображением и вставкой и сделают его читаемым человеком. Например, http://ko.wikipedia.org/wiki/ 위키백과:대문

Edit: При копировании такого URL-адреса в Firefox буфер обмена будет содержать форму с процентной кодировкой (что обычно хорошо), но если вы скопируете только ее часть, она останется некодированной.

123
ответ дан 24 November 2019 в 00:02
поделиться

Что сказал Тгр. Предыстория:

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

Это не URI. Но это IRI .

Вы не можете включить IRI в документ HTML4; тип атрибутов, таких как href , определяется как URI, а не как IRI. Некоторые браузеры все равно будут обрабатывать IRI, но это не очень хорошая идея.

Чтобы закодировать IRI в URI, возьмите части пути и запроса, закодируйте их в UTF-8, затем закодируйте в процентах байты, отличные от ASCII:

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

Если в части имени хоста есть символы, отличные от ASCII. IRI, например. http: // 例 え. テ ス ト / , вместо этого они были закодированы с использованием Punycode .

Теперь у вас есть URI. Уродливый URI. Но большинство браузеров скроют это для вас: скопируйте и вставьте его в адресную строку или перейдите по ссылке, и вы увидите, что он отображается с исходными символами Unicode. Википедия использовала это в течение многих лет, например: [

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

]. Единственный браузер, поведение которого непредсказуемо и не всегда отображает красивую версию IRI, это ...

... ну, вы знаете.

86
ответ дан 24 November 2019 в 00:02
поделиться

В зависимости от схемы URL-адреса вы можете сделать часть в кодировке UTF-8 "не важной". Например, если вы посмотрите на URL-адреса переполнения стека, они имеют следующую форму:

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

Однако серверу на самом деле все равно, если вы получите неправильную часть после идентификатора, так что это также работает:

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

Итак если бы у вас был такой макет, то вы потенциально могли бы использовать UTF-8 в части после идентификатора, и это не имело бы большого значения, если бы он был искажен. Конечно, это, вероятно, работает только в определенных обстоятельствах ...

16
ответ дан 24 November 2019 в 00:02
поделиться

Поскольку все эти комментарии верны, вы должны отметить, что что касается ICANN утвержденные арабские (персидские) и китайские символы для регистрации в качестве доменного имени, все компании-производители браузеров (Microsoft, Mozilla, Apple и т. д.) должны поддерживать Unicode в URL-адресах без какой-либо кодировки, и они должны быть доступны для поиска Google, и т.д.

Таким образом, этот вопрос будет решен как можно скорее.

4
ответ дан 24 November 2019 в 00:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: