Символы юникода в URL-адресах



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

символы Юникода запрещены в соответствии с RFC на URL-адресах (см. здесь). Они должны быть закодированы в процентах, чтобы соответствовать стандартам.

мой основной момент, однако, служит некодированным символам с единственной целью иметь красивые URL-адреса, поэтому процентное кодирование отсутствует.

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

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

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

есть ли какой-то волшебный способ обслуживания красивых URL-адресов в HTML

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

что можно скопировать + вставить со специальными символами нетронутыми, но работать правильно при повторном использовании в старых клиентах?

443   7  

7 ответов:

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

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

что сказал Tgr. Предыстория:

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

Это не URI. Но это и an Мико.

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

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

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

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

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

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

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

...ну, ты знаешь.

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

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

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

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

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

не уверен, что это хорошая идея, но, как упоминалось в других комментариях и как я это интерпретирую, многие символы Unicode действительны в HTML5 URLs.

например,href документы говорят http://www.w3.org/TR/html5/links.html#attr-hyperlink-href:

атрибут href для элементов A и area должен иметь значение, которое является допустимым URL-адресом, потенциально окруженным пробелами.

тогда определение "действительный URL" указывает на http://url.spec.whatwg.org/, который определяет URL - код точки как:

ASCII буквенно-цифровой,"!", "$", "&", "'", "(", ")", "*", "+", ",", "-", ".", "/", ":", ";", "=", "?", "@", "_", "~", и кодовые точки в диапазоне от U+00A0 до U+D7FF, от U+e000 до У+FDCF, у+FDF0 на U+FFFD, U+10000 до U+1FFFD, U+20000 до U+2FFFD, U+30000 до U+3FFFD, у+40000 до U+4FFFD, у+50000 до U+5FFFD, у+60000 до U+6FFFD, у+70000 до U+7FFFD, От U+80000 до U+8FFFD, у+90000 к От U+9FFFD, у+A0000 до U+AFFFD, у+B0000 до U+BFFFD, у+C0000 до U+CFFFD, у+D0000 до U+DFFFD, у+Е1000 до U+EFFFD, у+F0000 до U+FFFFD, у+100000 до U+10FFFD.

термин "кодовые точки URL" затем используется в нескольких частях алгоритма синтаксического анализа, например для относительное состояние пути:

Если c не является точкой кода URL и не"%", ошибка синтаксического анализа.

также валидатор http://validator.w3.org/ проходит по URL-адресам как "你好", и не проходит для URL-адресов с символами, такими как пробелы "a b"

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

Так что эта проблема будет решена как можно скорее.

используйте форму с процентным кодированием. Некоторые (в основном старые) компьютеры под управлением Windows XP, например, не поддерживают Unicode, а скорее ISO-кодировки. Именно по этой причине были изобретены URL-адреса с процентным кодированием. Кроме того, если вы даете URL-адрес, напечатанный на бумаге для пользователя, содержащий символы, которые не могут быть легко введены, этот пользователь может иметь трудное время ввода его (или просто игнорировать его). Закодированная в процентах форма может даже использоваться во многих из самых старых машин, которые когда-либо существовали (хотя они не поддерживают интернет конечно).

однако есть и обратная сторона, поскольку закодированные в процентах символы длиннее исходных, что, возможно, приводит к действительно длинным URL-адресам. Но просто попробуйте проигнорировать его, или использовать URL shortener (я бы рекомендовал goo.gl в этом случае, что делает 13-символьный URL). Кроме того, если вы не хотите регистрироваться в учетной записи Google, попробуйте bit.ly (bit.ly делает немного более длинные URL-адреса, длина которых составляет 14 символов).

для меня это правильный путь, это просто сработало:

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

это сработало, и теперь ссылки отображаются правильно:

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

ссылка на странице:

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

    Ничего не найдено.

Добавить ответ:
Отменить.