Я разрабатываю международный сайт, который использует UTF8 для отображения неанглийских символов. Я также использую дружественные URLS, которые содержат имя элемента. Очевидно, что я не могу использовать неанглийские символы в URL-адресе.
Существует ли какая-то обычная практика для этого преобразования? Я не уверен, какие английские символы я должен заменить. Некоторые из них совершенно очевидны (например, от e до e), но другие персонажи, с которыми я не знаком (например, ß).
Обычно я использую iconv () с опцией «ASCII // TRANSLIT». Это требует ввода:
último año
и производит выходные данные:
'ultimo a~no
Затем я использую preg_replace (), чтобы заменить пробелы тире:
'ultimo-a~no
… и удалить ненужные символы, например
[^a-z0-9-]
Это, вероятно, бесполезно с арабским или китайским, но отлично работает с испанским, французским или немецким.
Вы можете использовать кодированные данные UTF-8 в URL-адресах. Вам просто нужно закодировать его дополнительно с помощью кодировки Percent (см. rawurlencode
):
// ß (U+00DF) = 0xC39F (UTF-8) $str = "\xC3\x9F"; echo '<a href="http://en.wikipedia.org/wiki/'.rawurlencode($str).'">'.$str.'</a>';
Это будет означать ссылку на http://en.wikipedia.org/wiki/ß . Современные браузеры будут отображать сам символ ß
в строке местоположения вместо процентного кодированного представления этого символа в UTF-8 ( %C3%9F
).
Если вы не хотите использовать UTF-8, но только символы ASCII, я предлагаю использовать транслитерацию, например, предложенную Álvaro G. Vicario.
Очевидно, что я не могу использовать неанглийские символы в URL-адресе.
На самом деле, вы можете . Программное обеспечение Wikipedia (встроенное в PHP) поддерживает это, например en.wikipedia.org/wiki/☃ .
Обратите внимание, что вам необходимо правильно закодировать URL-адрес, как показано в других ответах.
Используйте rawurlencode
для кодирования имени для URL-адреса и rawurldecode
для преобразования имени в URL-адрес обратно в исходную строку. Эти две функции преобразуют строки в URL-адреса и из них в соответствии с RFC 1738 .
В прошлый раз, когда я пытался (примерно неделю назад), символы UTF-8 (в частности, японцы) отлично работали в URL-адресах без какой-либо дополнительной кодировки. Даже посмотрел прямо в адресных барах во всех браузерах, которые я тестировал (Safari, Chrome и Firefox, все на Mac), и я понятия не имею, какой браузер моя девушка использовала на окнах. Помимо большинства окон, которые я просматривал, просто показываю квадраты для японских персонажей, потому что им не хватает требуемых шрифтов для их отображения, кажется, что там тоже хорошо работает.
URL, который я пробовал, это: http://www.webghoul.de.private-void.net/cache/black-f-with- あ い -50.png ( похоже, что ОМУ это нравится)
Доказательство скриншотом http://img.ruphp.com/php/screenshot-utf8-url.png
Так что на самом деле это не может быть разрешено спецификацией, поскольку я видел, что он работает хорошо по всем направлениям, за исключением, может быть, редакторов, которые, как и спецификация, очень 😉
Я бы на самом деле не рекомендовал использовать эти типы символов в URL-адресах, но я также не стал бы первоочередной задачей «исправить».