как поддерживать UTF8 (японский, арабский, испанский, ...) URL в PHP - PullRequest
2 голосов
/ 11 октября 2010

Для веб-приложения нам нужна ссылка на некоторый пользовательский контент. Пользователь вводит заголовок, например, продукт, и мы создаем SEO оптимизированный URL для этого продукта:

как это

title: a nice product

www.user.com/product/a-nice-product

title: أبجد هوز

www.user.com/product/أبجد هوز

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

Кто-нибудь знает, как мы должны поддерживать это в php?

Википедия прекрасно справляется с этим: http://ar.wikipedia.org

Ответы [ 4 ]

6 голосов
/ 11 октября 2010

Хотя сам URL-адрес допускает только символы US-ASCII, вы можете использовать символы Unicode в пути URI , если кодировать их с помощью UTF-8, а затем конвертировать их в символы US-ASCII с помощью процентное кодирование :

Система, которая внутренне предоставляет идентификаторы в виде другой кодировки символов, например EBCDIC, обычно выполняет перевод символов текстовых идентификаторов в UTF-8 [ STD63 ] (или некоторый другой расширенный набор кодировки символов US-ASCII) на внутреннем интерфейсе, обеспечивая тем самым более значимые идентификаторы, чем идентификаторы, полученные в результате простого кодирования процентов оригинальных октетов.1012 * Таким образом, вы можете сделать что-то вроде этого (предполагая UTF-8):

$title = 'أبجد هوز';
$path = '/product/'.rawurlencode($title);
echo $path;  // "/product/%D8%A3%D8%A8%D8%AC%D8%AF%20%D9%87%D9%88%D8%B2"

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

1 голос
/ 11 октября 2010

Боюсь, ты в беде.Кодировка URL остается на усмотрение браузера.Я столкнулся с той же проблемой, когда пытался поддерживать URL-адреса с норвежскими специальными символами, и это просто не всегда возможно.

Возможно, вы сможете перенаправить браузер на URL-адрес UTF-8, но он может ответить вамв ISO.В некоторых случаях становится еще хуже, когда браузеры (например, firefox) будут смешивать форматирование ISO и UTF-8 в одном и том же URL-адресе (это особенно касается параметров get).

Мое предложение просто;Не делайте этого, используйте либо английский (лучше SEO!), Либо произносите его по буквам.

0 голосов
/ 29 октября 2013

Вы должны сделать urlencode арабского текста или текста в юникоде

urlencode('كلام-عربي')

И очень важно добавить код кодировки в тег заголовка страницы, иначе ссылка не будет работать

<meta charset="utf-8">
0 голосов
/ 11 октября 2010

Возможно, вам потребуется использовать кодировку IDNA в части URL, отличной от ASCII.

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

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