Я хочу иметь функцию для создания слагов из строк Unicode, например gen_slug('Andrés Cortez')
должен возвращать andres-cortez
. Как мне это сделать?
php
internationalization
slug
Андрес СК
источник
источник
andres
. Вы уверены, что ваш вклад точно "andrés"?Ответы:
Вместо долгой замены попробуйте это:
Это было основано на учебнике Symfony по Jobeet.
источник
^
сразу после открывающей скобки - она меняет матч.iconv
не будет правильно конвертироваться, если$text
содержит символы, не имеющие эквивалента ascii. Напримерiconv('utf-8', 'us-ascii//TRANSLIT', "EFI收购Cretaprint")
вернется"EFI"
и выдаст предупреждение.$text = trim($text, '-');
должно быть в конце, иначеFoo 收
становитсяfoo-
. ТакжеFoo 收 Bar
становитсяfoo--bar
(повторное-
кажется избыточным).Обновить
Поскольку этот ответ привлекает внимание, я добавляю некоторые пояснения.
Предоставленное решение по существу заменит все, кроме AZ, az, 0-9, & - (дефис) на - (дефис). Таким образом, он не будет работать должным образом с другими символами Юникода (которые являются допустимыми символами для слаг / строки URL). Распространенный сценарий - это когда входная строка содержит не английские символы.
Используйте это решение только в том случае, если вы уверены, что во входной строке не будет символов Юникода, которые вы, возможно, захотите включить в вывод / слаг.
Например. «नारी शक्ति» станет «----------» (все дефисы) вместо «नारी-शक्ति» (допустимый фрагмент URL).
Оригинальный ответ
Как насчет...
?
источник
strtolower(trim(preg_replace('/[^A-Za-z0-9-]+/', '-', "Étienne")))
возвращает"-tienne"
вместо"etienne"
, поэтому он не работает с акцентированными символами.Если у вас установлено расширение intl , вы можете использовать функцию Transliterator :: transiterate, чтобы легко создать слаг.
источник
Примечание: я взял это из WordPress, и это работает!
Используйте это так:
Код
источник
sanitize_title_with_dashes($string, null, 'save')
(обратите внимание на дополнительные параметры), в противном случае вы получите несколько беспорядочных кодов символов, таких какtelstra%e2%80%99s-%e2%80%98all-roles-flex%e2%80%99
. Не очень красиво. :-(sanitize
странное, забываемое имя функции для генерации пули.Всегда полезно использовать существующие решения, которые поддерживаются многими разработчиками высокого уровня. Самым популярным является https://github.com/cocur/slugify . Прежде всего, он поддерживает более одного языка, и он обновляется.
Если вы не хотите использовать весь пакет, вы можете скопировать ту часть, которая вам нужна.
источник
Вот еще один, например, «Заголовок со странными символами - AX Z» становится «Заголовок со странными символами-eee-axz».
источник
Обновленная версия кода @Imran Omar Bukhsh (из последней ветки Wordpress (4.0)):
Посмотреть онлайн пример .
источник
%c2%abgq%c2%bb-elyas-mbarek-geh%c3%b6rt-zu-m%c3%a4nnern-des-jahres
источник
Не используйте preg_replace для этого. Есть функция php, созданная специально для этой задачи: strtr () http://php.net/manual/en/function.strtr.php
Взято из комментариев в приведенной выше ссылке (и я сам это проверял; все работает:
источник
Я использую:
Единственным отступлением является то, что кириллические символы не будут преобразованы, и я сейчас ищу решение, которое не является длинным str_replace для каждого отдельного кириллического символа.
источник
set_locale('cyrillic.UTF-8')
первую очередь. Точное значение зависит от ваших установленных локалей.Я не знал, какой из них использовать, поэтому быстро пробежался по phptester.net
Начало:
Выходные результаты:
Необходимы дальнейшие испытания.
Изменить: тест меньше итераций
Начало:
Выходные результаты:
источник
Вы могли бы посмотреть
Normalizer::normalize()
, смотрите здесь . Просто нужно загрузить модуль intl для PHPисточник
Как насчет того, что уже реализовано в Core?
Или один из основных методов перезаписи url / url.
источник
Поскольку рДВУ и ИДИ становятся все более и более используемыми, я не могу понять, почему URL не должен содержать Андрес.
Просто rawurlencode $ URL, который вы хотите вместо этого. Большинство браузеров отображают символы UTF-8 в URL-адресах (возможно, не в каком-то древнем IE6), и bit.ly / goo.gl можно использовать для сокращения в таких случаях, как русский и арабский, если это необходимо для рекламных целей, или просто напишите их в рекламе. как пользователь будет писать их в URL браузера.
Разница лишь в пробелах "". Было бы неплохо заменить их на "-" и "/", если вы не хотите их разрешать.
Веб - сайт , как кодированные http://www.hurtta.com/RU/%D0%9F%D1%80%D0%BE%D0%B4%D1%83%D0%BA%D1%82%D1%8B/
URL как написано http://www.hurtta.com/RU/Продукты/
источник
Я написал это на основе ответа Maerlyn. Эта функция будет работать независимо от кодировки символов на странице. Это также не превратит одинарные кавычки в тире :)
источник
на моем локальном хосте все было в порядке, но на сервере мне помогли "set_locale" и "utf-8" в "mb_strtolower".
источник
Я думаю, что самый элегантный способ - использовать Behat \ Transliterator \ Transliterator.
Мне нужно расширить этот класс вашим классом, потому что это абстрактный, некоторые вроде этого:
А потом просто используйте это:
Конечно, вы должны поместить эти вещи и в своего композитора.
Более подробная информация здесь https://github.com/Behat/Transliterator
источник
Там хорошее решение здесь , что имеет дело со специальными символами , а также.
Texto Fantástico => Тексто-Фантастика
Автор: Natxet
источник
Это может быть способ сделать это тоже. Вдохновленные этими ссылками Эксперты-биржа и Алиналександр
источник
Так как я видел много методов здесь, но я нашел самый простой метод для себя. Возможно, это кому-то поможет.
источник
Для меня этот вариант идеален, и он меняется
&
наand
. Вот код:источник