Юникод-символы в URL-адресах
В 2010 году вы будете показывать URL-адреса, содержащие символы UTF-8 на большом веб-портале?
Символы Unicode запрещены в соответствии с RFC по URL-адресам (см. здесь). Они должны быть закодированы в процентах, чтобы соответствовать стандартам.
Мое главное, однако, обслуживать незарегистрированные символы с единственной целью - иметь красивые URL-адреса, поэтому процентная кодировка отсутствует.
Все основные браузеры, похоже, анализируют эти URL-адреса, независимо от того, что говорит RFC. Мое общее впечатление, однако, в том, что он становится очень шатким при выходе из домена веб-браузеров:
- URL-адреса, получающие копию + вставляемые в текстовые файлы, электронные письма, даже веб-сайты с другим кодированием
- Библиотеки HTTP-клиента
- Экзотические браузеры, читатели RSS
Насколько я уверен, что здесь можно ожидать неприятностей, и, следовательно, это не практическое решение (пока), если вы обслуживаете нетехническую аудиторию, и важно, чтобы все ваши ссылки работали правильно, даже если они цитировались и передавались
Есть ли какой-то волшебный способ обслуживания симпатичных URL-адресов в HTML
http://www.example.com/düsseldorf?neighbourhood=Lörick
который может быть скопирован + вставлен с особыми символами неповрежденными, но корректно работать при повторном использовании у более старых клиентов?
Ответы
Ответ 1
Использовать процентную кодировку. Современные браузеры будут заботиться о проблемах с отображением и вставкой и сделать их доступными для человека. E. g. http://ko.wikipedia.org/wiki/위키 백과: 대문
Изменить:, когда вы копируете такой URL-адрес в Firefox, буфер будет содержать процентную форму (обычно это хорошо), но если вы копируете только ее часть, будет оставаться незакодированным.
Ответ 2
Что сказал Tgr. Справочная информация:
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
Если в части имени хоста IRI есть символы, отличные от ASCII, например. http://例え.テスト/
, они были закодированы вместо Punycode.
Теперь у вас есть URI. Это уродливый URI. Но большинство браузеров скроют это для вас: скопируйте и вставьте его в адресную строку или следуйте по ссылке, и вы увидите, что она отображается с оригинальными символами Юникода. Википедия использует это в течение многих лет, например:
http://en.wikipedia.org/wiki/ɸ
Один браузер, чье поведение непредсказуемо и не всегда отображает симпатичную версию IRI,...
... ну, вы знаете.
Ответ 3
В зависимости от вашей схемы URL вы можете сделать кодированную часть UTF-8 "неважной". Например, если вы посмотрите URL-адреса, они имеют следующую форму:
http://stackoverflow.com/questions/2742852/unicode-characters-in-urls
Тем не менее, серверу действительно не нравится, если вы получаете часть после неправильного идентификатора, поэтому это также работает:
http://stackoverflow.com/questions/2742852/これは、これを日本語のテキストです
Итак, если у вас был такой макет, то вы могли бы использовать UTF-8 в части после идентификатора, и было бы неважно, если бы он исказился. Конечно, это, вероятно, работает только в особых обстоятельствах...
Ответ 4
Не уверен, что это хорошая идея, но, как упоминалось в других комментариях, и, как я ее интерпретирую, многие символы Unicode действительны в URL-адресах HTML5.
Например, href
docs say http://www.w3.org/TR/html5/links.html#attr-hyperlink-href:
Атрибут href для элементов a и area должен иметь значение, которое является допустимым URL, потенциально окруженным пробелами.
Тогда определение "действительный URL" указывает на http://url.spec.whatwg.org/, который определяет URL-коды URL как:
ASCII буквенно-цифровые, "!", "$", "&", "'", "(", ")", "*", "+", ",", "-", ".", "/", ":", ";", "=", "?", "@", "_", "~" и кодовые точки в диапазонах 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.
Термин "URL-коды кодов" затем используется в нескольких частях алгоритма синтаксического анализа, например. для состояния относительного пути:
Если c не является кодовой точкой URL, а не "%", ошибка синтаксического анализа.
Также валидатор http://validator.w3.org/ передает URL-адреса, такие как "你好"
, и не передает URL-адреса с такими символами, как пробелы "a b"
Ответ 5
Поскольку все эти комментарии верны, вы должны отметить, что до ICANN одобрены арабские (персидские) и китайские символы для быть зарегистрированным как доменное имя, все браузерные компании (Microsoft, Mozilla, Apple и т.д.) должны поддерживать Unicode в URL-адресах без какой-либо кодировки, и они должны быть доступны для поиска Google и т.д.
Таким образом, эта проблема будет устранена как можно скорее.
Ответ 6
Использовать процентную форму. Некоторые (в основном старые) компьютеры под управлением Windows XP, например, не поддерживают Unicode, а скорее кодируют ISO. Вот почему были изобретены URL-адреса, закодированные в процентах. Кроме того, если вы укажете URL-адрес, напечатанный на бумаге для пользователя, содержащий символы, которые не могут быть легко напечатаны, пользователю может быть трудно набрать его (или просто игнорировать). Пропорционально-кодированная форма может даже использоваться во многих из самых старых машин, которые когда-либо существовали (хотя они, конечно же, не поддерживают интернет).
Однако существует недостаток, поскольку процентные символы больше, чем исходные, что, возможно, приводит к действительно длинным URL-адресам. Но просто попробуйте проигнорировать его или используйте сокращенный URL (я бы рекомендовал goo.gl в этом случае, что делает длинный URL длиной 13 символов). Кроме того, если вы не хотите регистрироваться в учетной записи Google, попробуйте bit.ly (bit.ly делает несколько более длинные URL-адреса с длиной составляет 14 символов).
Ответ 7
Для меня это правильный путь, это просто сработало:
$linker = rawurldecode("$link");
<a href="<?php echo $link;?>" target="_blank"><?php echo $linker ;?></a>
Это сработало, и теперь ссылки отображаются правильно:
http://newspaper.annahar.com/article/121638 -hعرض - جوزف-حرب-في-غاليري-جانين-ربيز-لوحاته-الجدية-تبحث-وتكتشف-وتفرض -Blagحترام
Ссылка найдена на:
http://www.galeriejaninerubeiz.com/newsite/news