Dasha_Opozdasha
@Dasha_Opozdasha

Почему preg_replace не работает, если в регулярном выражении указан модификатор?

Есть строка: 'qw123`!@#$^&*I)&)%*#^_)*)^* $^@%$&-_&%&*#^zxЛО ---Лcd - asd asd '
Нужно чтобы на выходе эта строка выглядела вот так: qw123-I-zxЛО-Лcd-asd-asd.
Есть код:
$output = trim(preg_replace('/([^\w]+|[\_])+/', '-',strtolower($temp)), '-');
выводит эту строку вот так: qw123-i-zx�-�-�-cd-asd-asd
Есть модификатор для регулярок u. Но если его использовать в функции preg_replace ничего не выводит вообще. Помогите пожалуйста.
  • Вопрос задан
  • 544 просмотра
Решения вопроса 1
Dasha_Opozdasha
@Dasha_Opozdasha Автор вопроса
в общем проблема была в функции strtolower. Она не понимает кириллицу. Если использовать mb_strtolower и указывать кодировку все работает.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
AlexMaxTM
@AlexMaxTM
Если в исходной строке есть UTF-8, то \w работать не будет. Нужно либо писать так:
'/^([а-яА-ЯЁёa-zA-Z0-9_]+)$/u'
Либо использовать функции РНР:
mb_ereg
mb_ereg_match
mb_regex_encoding
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы