[PHP] preg_replace и UTF-8

12
LEOnidUKG
На сайте с 25.11.2006
Offline
1774
2183

Так ребятки, задача для полуночников :crazy:

Есть такой код:

$t='В,здании,отделения,Пенсионного,фонда,под,Астраханью,прогремел,взрыв';

$t = preg_replace("|\b[\d\w]{1,3},\b|i","",$t);

Он убирает все слова от 1 до 3 символов. АХ! Как всё прекрасно в cp1251

Начинаем переводить в UTF-8

$t = preg_replace("|\b[йцукенгшщзхъфывапролджэячсмитьбюЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ]{1,4},\b|iu","",$t);

Эм... ничего не происходит.

Ваши варианты :popcorn:

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/ ✅ Настройка и оптимизация серверов https://getmanyspeed.ru/
Д
На сайте с 01.04.2012
Offline
166
#1

$t = iconv('cp1251','UTF-8',$t);

---------- Добавлено 27.03.2013 в 23:48 ----------

Или так

$t = preg_replace("|\b[\d\w]{1,3},\b|i","iconv('cp1251','UTF-8",$t);

LEOnidUKG
На сайте с 25.11.2006
Offline
1774
#2
Дадуда:
$t = iconv('cp1251','UTF-8',$t);

Не, такое читерство я оставляю на самый последний случай :)

sabotage
На сайте с 14.02.2007
Offline
192
#3

'~(?<![а-яёЁa-z])([а-яёЁa-z]{1,3})(?![а-яёЁa-z])~iu'

siv1987
На сайте с 02.04.2009
Offline
427
#4

1) Файл с таким набором символов должен быть в utf-8

2) /(^|,)\p{L}{1,3}(,|$)/u

LEOnidUKG
На сайте с 25.11.2006
Offline
1774
#5
sabotage:
'~(?<![а-яёЁa-z])([а-яёЁa-z]{1,3})(?![а-яёЁa-z])~iu'

Чуть переделал под себя, но это "наркомания", хотя работает :)

---------- Добавлено 28.03.2013 в 02:02 ----------

siv1987:
1) Файл с таким набором символов должен быть в utf-8
2) /(^|,)\p{L}{1,3}(,|$)\b/u

1. Да ладно? :)

2. Не катит это, уже читал мануалы.

sabotage
На сайте с 14.02.2007
Offline
192
#6
LEOnidUKG:
Чуть переделал под себя, но это наркомания

Это не наркомания, а простейшее решение прямо с ходу. Пожалуйста.

LEOnidUKG
На сайте с 25.11.2006
Offline
1774
#7
sabotage:
Это не наркомания, а простейшее решение прямо с ходу. Пожалуйста.

Я о разнице подходов всего лишь из-за смены кодировки.

bukachuk
На сайте с 07.09.2008
Offline
97
#8

$t='В,здании,отделения,Пенсионного,фонда,под,Астраханью,прогремел,взрыв';

$t = preg_replace("|\b[\d\w]{1,3},\b|iu","",$t);

Тока проверил в utf все ок

Программирование PHP,Mysql (/ru/forum/934470)
IL
На сайте с 20.04.2007
Offline
435
#9
LEOnidUKG:
2. Не катит это, уже читал мануалы.

Должно катить


$t1 = 'В,здании,отделения,Пенсионного,фонда,под,Астраханью,прогремел,взрыв';
$t2 = 'В,зда,нии,отделения,Пенсионного,фо,нда,под,Астраханью,прогремел,взрыв';
$t1 = preg_replace("/\b\p{L}{1,3}(,|$)\b/u", "", $t1);
$t2 = preg_replace("/\b\p{L}{1,3}(,|$)\b/u", "", $t2);
echo $t1;
echo $t2;
здании,отделения,Пенсионного,фонда,Астраханью,прогремел,взрыв
отделения,Пенсионного,Астраханью,прогремел,взрыв
... :) Облачные серверы от RegRu - промокод 3F85-3D10-806D-7224 ( http://levik.info/regru )
LEOnidUKG
На сайте с 25.11.2006
Offline
1774
#10
Тока проверил в utf все ок

Чудеса :)

Должно катить

Должно, не значит, что оно работает.

И этот модификатор работает только с "--enable-unicode-properties", не у всех он стоит. На винде подавно.

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий