Заголовок PHP preg_replace (неанглийские символы) для очистки slug не работает

Я пытаюсь превратить заголовки в слизняки

$string = "آزمون پادشاهی متحده";
$pattern = '/[`~!@#$%^&*()_|+\=?;:..’“\'"<>,€£¥•،٫؟»«\{\}\[\]\\/]+/gi';
            $replacement = '';

            $slug = trim(preg_replace($pattern, $replacement, $string));
            $slug = str_replace(" ","-",$slug);

В конечном результате пробелы آزمون-پادشاهی-متحده должны быть заменены дефисом.

Другой пример название: Great Britain пуля: great-britain

Как мне решить?

Регулярное выражение PHP не поддерживает g. Кроме того, вам понадобится модификатор u. Попробуйте $pattern = '/[ ~! @ # $% ^ & * () _ | + \ =?;: .. '«\'" <>, € £ ¥ • ، ٫؟ »« \ {\} [] \\\\ \ ‌ /] + / ui '; `

Wiktor Stribiżew 08.10.2018 13:08

Вам нужно использовать регулярное выражение дважды. Сначала удалите дополнительный символ, а затем замените пробел на -

Mohammad 08.10.2018 13:11

Попробуйте $pattern = '/[`~!@#$%^&*()_|+\=?;:..’“\'"<>,€£¥•،٫؟»«\{\}\[\]\\\\/]+/u‌​i';. Кажется, проблема с неэкранированным \ в шаблоне рядом с модификатором u.

Wiktor Stribiżew 08.10.2018 13:13
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
3
41
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Здесь вам необходимо применить следующие исправления:

  • Экранировать шаблон соответствия обратной косой черты, то есть '\\\\'
  • Удалите модификатор g, так как он не поддерживается PHP preg_replace (по умолчанию он заменяет все вхождения во входных данных)
  • Добавьте модификатор u, чтобы механизм PCRE мог анализировать как шаблон, так и входные данные как строки Unicode.

Использовать

$string = "آزمون پادشاهی متحده";
$pattern = '/[`~!@#$%^&*()_|+=?;:..’“\'"<>,€£¥•،٫؟»«{}[\]\\\\/]+/ui';
$replacement = '';

 $slug = trim(preg_replace($pattern, $replacement, $string));
 $slug = str_replace(" ","-",$slug);
 echo $slug;

Смотрите Демо PHP.

Обратите внимание, что [, =, { и } не являются специальными внутри класса символов и не нуждаются в экранировании.

Другие вопросы по теме