До сега хиляди пъти съм заменял текст със друг , но този път ми възникна един проблем представен като пример:
$str="Мартин Иванов Петров | мартин иванов петров";
$str=$str_replace("/Мартин/i","MARTIN",$str);
echo $str;
В този случай би трябвало да ми изведе
"MARTIN Иванов Петров | MARTIN иванов петров"
Но ми извежда
"Мартин Иванов Петров | MARTIN иванов петров";
Има проблем с локала.
Такъв проблем имаше и някакъв грък писал запитване на php devs, но краен отговор не получи. Както и да е.
Решението е ( за различните енкодинги друг локал се сетва):
<?php
setlocale(LC_ALL, 'bg_BG');
?>
PS: Същия проблем имаше един приятел когато искаше да направи cp1251 текст с големи букви и не ставаше.
Ето го решението:
echo strtoupper("Преди setlocale-<i>Мартин Петров</i><br>");
setlocale(LC_ALL,"bg_BG");
echo strtoupper("Преди setlocale-<b>Мартин Петров</b><br>");
Резултат:
Преди SETLOCALE-Мартин Петров
ПРЕДИ SETLOCALE-МАРТИН ПЕТРОВ