как поддерживать UTF8 (японский, арабский, испанский, …) URL в PHP

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

как это

title: a nice product www.user.com/product/a-nice-product title: أبجد هوز www.user.com/product/أبجد هوز 

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

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

wikipedia обрабатывает это просто отлично: http://ar.wikipedia.org

Solutions Collecting From Web of "как поддерживать UTF8 (японский, арабский, испанский, …) URL в PHP"

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

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

Поэтому вы можете сделать что-то вроде этого (предполагая 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.

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

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

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

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

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

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

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

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

 <meta charset="utf-8">