Символы юникода в URL-адресах
в 2010 году вы бы обслуживали URL-адреса, содержащие символы UTF-8, на большом веб-портале?
символы Юникода запрещены в соответствии с RFC на URL-адресах (см. здесь). Они должны быть закодированы в процентах, чтобы соответствовать стандартам.
мой основной момент, однако, служит некодированным символам с единственной целью иметь красивые URL-адреса, поэтому процентное кодирование отсутствует.
все основные браузеры, похоже, разбирают эти URL-адреса в порядке, независимо от того, что говорит RFC. Мое общее впечатление, однако, заключается в том, что он становится очень шатким при выходе из домена веб-браузеров:
- URL-адреса копируются + вставляются в текстовые файлы, электронные письма, даже веб-сайты с другой кодировкой
- клиентские библиотеки HTTP
- экзотические браузеры, читатели RSS
правильно ли мое впечатление, что здесь следует ожидать неприятностей, и поэтому это не практическое решение (пока), если вы обслуживаете нетехническую аудиторию, и это важно, чтобы все ваши ссылки работали правильно, даже если они цитируются и передаются?
есть ли какой-то волшебный способ обслуживания красивых URL-адресов в HTML
http://www.example.com/düsseldorf?neighbourhood=Lörick
что можно скопировать + вставить со специальными символами нетронутыми, но работать правильно при повторном использовании в старых клиентах?
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-معرض--جوزف-حرب-في-غاليري-جانين-ربيز-لوحاته-الجدية-تبحث-وتكتشف-وتفرض-الاحترام
ссылка на странице:
Comments