Для веб-приложения нам нужно связать некоторые материалы, созданные пользователями. Пользователи набирают название, например, продукт, и мы создаем дружественный 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
Хотя сам 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-адреса.
Вы должны сделать urlencode текст в арабском или юникоде
urlencode('كلام-عربي')
И очень важно добавить код кодировки в главный тег страницы, иначе ссылка не будет работать
<meta charset="utf-8">