Роберт
Аналитик
preg_replace и модификатор 'u'
Может кто-то сталкивался - действительно ли preg_replace() не коректно работает с UTF-8?
Если взять описание - то там написано , что якобы есть модификатор u (PCRE_UTF8) , при котором шаблоны обрабатываются как строки UTF8. Однако на практике ничего не получается. Даже при включенном модификаторе i - большие и маленькие буквы не распознаются. Если у меня UTF8 строка с текстом - "Привет" , то "привет" в ней найден не будет! А "ривет" найдётся без любых модификаторов - так как это точное совпадение...
Вот простой код:
Пробывал и на UNIX машине с PHP 4.2.2 , и на Windows машине с РНР 5.0.4
Есть ли какая-то возможность заставить preg_* искать в UTF-8 тексте без учёта регистров? (только несоветуйте переводить в cp1251 , так как у меня текст на многих языках)
Может кто-то сталкивался - действительно ли preg_replace() не коректно работает с UTF-8?
Если взять описание - то там написано , что якобы есть модификатор u (PCRE_UTF8) , при котором шаблоны обрабатываются как строки UTF8. Однако на практике ничего не получается. Даже при включенном модификаторе i - большие и маленькие буквы не распознаются. Если у меня UTF8 строка с текстом - "Привет" , то "привет" в ней найден не будет! А "ривет" найдётся без любых модификаторов - так как это точное совпадение...
Вот простой код:
PHP:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<?
$S=iconv('cp1251','UTF-8','Это похороны PHP!');
$mini=iconv('cp1251','UTF-8','Похороны');
echo preg_replace("/$mini/ui","<b>$mini</b>",$S);
?>
Есть ли какая-то возможность заставить preg_* искать в UTF-8 тексте без учёта регистров? (только несоветуйте переводить в cp1251 , так как у меня текст на многих языках)