Эта тема на forum.dklab.ru


thorr: preg_replace и русские буквы
почему у меня этот код не производит замену, а оставляет строку неизменной?


$txt = "Стремление стрЕмлЕнИе стреМЛение";
$txt = preg_replace("/стремление/i", "стремление", $txt);
print $txt;


а если заменить русские буквы английскими, то все работает: находит без учета регистра и меняет.

(версия php у хостера 4.3.9
если проблема в версии php, то как это можно обойти?
)
bæv:
http://ru.php.net/manual/ru/function.setlocale.php
thorr:
не-а. все равно не пашет. поставил перед этим куском setlocale(LC_ALL, 'russian') (пробовал также вторым аргументом 'russia', 'ru_RU', 'rus', 'win-1251','Russian_Russia.1251' (последний аргумент был получен как результат setlocale(LC_ALL,"0") на домашнем компе, где данный пример работал и без setlocale. там стоял последний Денвер)) - никакого эффекта (на сервере хостера)
собственно изначально была задача подсвечивать найденные слова на страницах типа
preg_replace("/".$_GET['highlite']."/i","<font class=hl>".$_GET['highlite']."</font>",$content)
но, поскольку не работало, то написал отладочный пример, который тоже не фурычит.
Педагог:
Такие вопросы лучше задавать самому хостеру в суппорт - они точно должны знать, как у них там все настроено. Заготовьте для них этот тестовый нерабочий скрипт и укажите его в обращении.
Г.О.:
thorr, попробуйте "ru_RU.CP1251"
thorr:
thorr, попробуйте "ru_RU.CP1251"


уфф. заработало! спасибо!!!
Rum:
ru_RU.CP1251
Г.О.
Спасибо спаситель, три часа бился с str_ireplace и русским языком=)) пока на ваш форум не нтаткнулся.
Артём Сергеич:
Спасибо вам тоже огромное! Я уж думал писать самостоятельно все эти функции регистронезависимого сравнения для русских букв.
Итак, ставим
setlocale(LC_ALL, "russian","ru_RU.CP1251");
где угодно перед актом сравнения и все будет замечательно!

Эта тема на forum.dklab.ru