Ответов: 16 Просмотров: 5689
|
Вот и мне понадобилась такая функция. По интернету искал, но так и не нашел корректного решения. Setlocale мне не помог (nix).
Сделал вот такое решение (может кому пригодится):
PHP:
скопировать код в буфер обмена
function letter_up_down($letter, $choice) { $alfavitlower = array('ё','й','ц','у','к','е','н','г', 'ш','щ','з','х','ъ','ф','ы','в', 'а','п','р','о','л','д','ж','э', 'я','ч','с','м','и','т','ь','б','ю'); $alfavitupper = array('Ё','Й','Ц','У','К','Е','Н','Г', 'Ш','Щ','З','Х','Ъ','Ф','Ы','В', 'А','П','Р','О','Л','Д','Ж','Э', 'Я','Ч','С','М','И','Т','Ь','Б','Ю'); if ($choice == "up") { $text = str_replace($alfavitlower, $alfavitupper, $letter); } if ($choice == "down") { $text = str_replace($alfavitupper, $alfavitlower, $letter); } return $text; } function preg_replace_ru_no_case($word_for_replace, $replace, $string) { $pattern = ""; //работаем с каждой буквой for ($i=0; $i<strlen($word_for_replace); $i++) { //если буква в верхнем регистре, то преобразуем ее в нижний $lower = letter_up_down($word_for_replace[$i], "down"); //если буква в нижнем регистре, то преобразуем ее в верхний $upper = letter_up_down($word_for_replace[$i], "up"); $pattern .= "[".$upper.$lower."]"; } $output = preg_replace("/".$pattern."/i", $replace, $string); return $output; }
Использование:
PHP:
скопировать код в буфер обмена
$text = preg_replace_ru_no_case("мама", "папа", "маМа МаМА мама Мамочка"); echo $text; результат: "папа папа папа Мамочка"
По сути весь скрипт сводится к:
На идеальность скрипта не претендую, но он работает. |