Может ли кто-нибудь предоставить мне функцию для генерации слагов?

Dec 30 2020

Функции, которые Wordpress использует для создания ярлыков, разбросаны по нескольким функциям и фильтрам. Я не могу найти их всех. Может ли кто-нибудь предоставить мне одну функцию php для создания слагов? Мне не нужны все функции Wordpress, просто нужно кодировать нелатинские символы и удалять недопустимые символы, которые не разрешены в URL-адресе.

Этот пост предоставляет функцию, но не может обрабатывать нелатинские символы.

Спасибо!

Ответы

1 TomJNowell Dec 30 2020 at 21:14

Этот пост предоставляет функцию, но не может обрабатывать нелатинские символы.

Это потому, что URL-адреса не могут содержать символы, отличные от латинских / ASCII.

Браузеры могут показывать вам нелатинские символы, но это всего лишь функция пользовательского интерфейса.

Например, если вы посещаете этот URL-адрес викисловаря:, URL-адрес https://en.wiktionary.org/wiki/わかもの#Japaneseвашего браузера кодирует японские символы, чтобы получить реальный URL-адрес: https://en.wiktionary.org/wiki/%E3%82%8F%E3%81%8B%E3%82%82%E3%81%AE#Japaneseзатем URL-адрес декодирует его при отображении URL-адреса. Версия со знаками процента - это настоящий URL.

То же самое с любыми другими кодами символов, отличными от ASCII, например арабским. Если вы создадите сообщение с помощью slug, わかものзатем сохраните и проверьте базу данных, вы не увидите わかもの, вы увидите %e3%82%8f%e3%81%8b%e3%82%82%e3%81%ae. Точно так же пользовательский интерфейс покажет вам японские символы, но если вы скопируете ссылку, вы получите закодированную версию.

Если мы затем обновим базу данных и изменим слаг сообщения на わかもの, сообщение теперь не может быть загружено, и мы получим 404. Это потому, что слаг недействителен и невозможно загрузить URL, который соответствует этому слагу.

да, мне нужно, чтобы нелатинские символы были закодированы как% xx

Вы должны urlencodeемуecho urlencode( $slug )