Преобразование текста UTF8 для использования в URL - PullRequest
4 голосов
/ 10 марта 2010

Я разрабатываю международный сайт, который использует UTF8 для отображения не английских символов. Я также использую дружественные URL, которые содержат название элемента. Очевидно, что я не могу использовать не английские символы в URL.

Есть ли какая-то обычная практика для этого обращения? Я не уверен, какие английские символы я должен заменить их. Некоторые из них довольно очевидны (например, от ё до е), но другие символы, с которыми я не знаком (например, ß).

Ответы [ 5 ]

6 голосов
/ 10 марта 2010

Вы можете использовать данные в кодировке UTF-8 в URL-путях. Вам просто нужно дополнительно закодировать его с помощью Процент кодирования (см. 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, я предлагаю использовать транслитерацию, как предложил Альваро Дж. Викарио.

5 голосов
/ 10 марта 2010

Я обычно использую iconv () с опцией 'ASCII // TRANSLIT'. Это требует ввода как:

último año

и производит вывод как:

'ultimo a~no

Затем я использую preg_replace (), чтобы заменить пробелы черточками:

'ultimo-a~no

... и удалить ненужные символы, например

[^a-z0-9-]

Это, вероятно, бесполезно с арабским или китайским языком, но отлично работает с испанским, французским или немецким.

3 голосов
/ 10 марта 2010

Очевидно, я не могу использовать неанглийские символы в URL.

На самом деле, вы можете . Программное обеспечение Wikipedia (встроенное в PHP) поддерживает это, например, en.wikipedia.org / вики / ☃ .

Обратите внимание, что вам необходимо правильно закодировать URL, как показано в других ответах.

2 голосов
/ 10 марта 2010

Используйте rawurlencode, чтобы закодировать свое имя для URL, и rawurldecode, чтобы преобразовать имя в URL обратно в исходную строку. Эти две функции преобразуют строки в URL-адреса и из них в соответствии с RFC 1738 .

0 голосов
/ 10 марта 2010

В прошлый раз, когда я пытался (около недели назад), символы UTF-8 (особенно японские) отлично работали в URL без какой-либо дополнительной кодировки. Даже выглядело правильно в адресных строках во всех браузерах, с которыми я тестировал (Safari, Chrome и Firefox, все на Mac), и я понятия не имею, какой браузер использовал моя подруга в Windows. Помимо большинства установок Windows, я сталкивался только с показом квадратов для японских иероглифов, потому что у них нет необходимых шрифтов для их отображения, но, похоже, и там он работает нормально.

URL, который я пробовал: http://www.webghoul.de.private -void.net / cache / black-f-with- あ い -50.png (ОМУ, похоже, не нравится)

Доказательство по скриншоту http://heavymetal.theredhead.nl/~kris/stackoverflow/screenshot-utf8-url.png

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

На самом деле я бы не советовал использовать эти типы символов в URL-адресах, но я бы также не сделал это первым приоритетом для «исправления».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...