Я переписываю URL-адреса, чтобы включить заголовок созданных пользователем веб-страниц.
Я делаю это как для чтения URL-адресов, так и для SEO-целей.
http://www.example.com/gallery/280-Gorges_du_Todra/
Первое целое число - это id, остальное для нас - люди (но не имеет значения для запроса ресурса).
Теперь люди могут писать заголовки, содержащие любой символ UTF-8, но большинство из них не разрешено в URL-адресе. Моя аудитория, как правило, говорит по-английски, но, поскольку они путешествуют, им нравится включать такие имена, как
Aït Ben Haddou
Каков правильный способ перевести это для отображения в URL-адресе с помощью PHP на Linux.
До сих пор я видел несколько решений:
-
просто разделите все не разрешенные символы, замените пробелы это имеет странные результаты:
'Aït Ben Haddou' → /gallery/280-At_Ben_Haddou/
Не очень полезно. -
просто разделите все не разрешенные символы, замените пробелы, оставьте charcode (stackoverflow.com), скорее всего, из-за "regex-hammer", используемого
это дает странные результаты:'tést tést' → /info/0000/t233st-t233st
-
перевести на "ближайший эквивалент"
'Aït Ben Haddou' → /gallery/280-Ait_Ben_Haddou/
Но это не так для немецкого; например, "ü" следует транслитерировать "ue".
Для меня, как голландца, третий результат "выглядит" лучшим.
Я уверен, однако, что (1) у многих людей будет другое мнение, и (2) это просто неправильно в немецком примере.
Еще одна проблема с третьей опцией: как найти все возможные символы, которые можно преобразовать в 7-битный эквивалент?
Итак, вопрос:
-
что, на ваш взгляд, является самым желанным результатом. (в пределах технических ограничений)
-
Как технически решить эту проблему. (достичь желаемого результата) с помощью PHP.