Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Тексты > не работает preg_replace


Автор: sanich_ 20.5.2008, 23:15
Код

$search_words = 'ваз';
$words='ВАЗ продам ваз';
echo preg_replace('/'.$search_words.'/i', '<b class="warning">\\0</b>', $words);



Явно указываю параметр "i" в шаблоне, но почему то замена происходит тольок при совпадении регистра.

В чем может быть проблема?

P.S. функция неправильно работает на PHP хостинга, а на PHP локального web сервера работает корректно, может какие общераспространенные настройки, о которых я не знаю, нужно сделать?

Автор: Feldmarschall 20.5.2008, 23:51
в поиск по форуму по слову setlocale

Автор: sanich_ 21.5.2008, 02:14
Цитата(Feldmarschall @ 20.5.2008,  23:51)
в поиск по форуму по слову setlocale

заработало 

Код

setlocale(LC_ALL, 'ru_RU.CP1251');
$search_words = 'продам|ваз';
$words='ВАЗ продам ваз ПРОДАМ';
echo preg_replace('/'.$search_words.'/i', '<b>\\0</b>', $words);


Это нужно каждый раз вызывать функцию setlocale(LC_ALL, 'ru_RU.CP1251') перед использованием preg_replace?
Или достаточно один раз в модуле вызвать setlocale(LC_ALL, 'ru_RU.CP1251') ?
Нет ли способа это наладить в натройках php?

Автор: Feldmarschall 21.5.2008, 09:06
Это явно от ночного кодинга вопросы.
Думаю, на свежую голову они перестанут казаться столь важными, чтобы их писать на форум.

Автор: chirs99 8.6.2008, 20:07
У меня примерно тот же вопрос был. Но с кодировкой UTF-8. Т.е. мне нужен регистронезависимый поиск подстроки в строке, причем обе они в кодировке UTF-8. Преобразовывать в другие кодировки нельзя, т.к. текст, который ищем и в котором ищем - может быть на разных языках (русский, французский, немецкий, иврит и т.д.), а заранее мы не можем знать, какой там будет текст. Можете подсказать как можно поступить ? или в каком направлении по крайней мере идти ?

Автор: Feldmarschall 8.6.2008, 20:31
в направлении мануала и mbstring

Автор: chirs99 9.6.2008, 04:05
Т.е. как ни копай документацию, а функцию для регистронезависимого поиска в кодировке UTF-8 не найти и ее придется писать самому с использованием mbstring ?

Автор: skyboy 9.6.2008, 10:11
Цитата(chirs99 @  9.6.2008,  03:05 Найти цитируемый пост)
а функцию для регистронезависимого поиска в кодировке UTF-8

т.е. имеющиеся тебя не устроили? 
ну, что ж. тогда пиши свою.
я-то думал, что там на любой вкус функции по работе с utf-строками...

Автор: Feldmarschall 9.6.2008, 10:52
Что делать, если человек вместо выполнения рекомендации начинает над ней размышлять.

Автор: chirs99 9.6.2008, 17:24
Раз такие умные, напишите мне, какая функция PHP может осуществить регистронезависимый поиск подстроки в строке в кодировке UTF-8. Только не надо мне предлагать stripos или регулярное выражение с ключом /i. И даже mb_stripos - тоже не может сделать такой поиск. Для кодировки UTF-8 все это не катит. Попробуйте хотя бы этот пример:
Код

$mystring = iconv('windows-1251','utf-8','всем привет !');
$findme = iconv('windows-1251','utf-8','ПРИвет');
if (mb_stripos($mystring,$findme)) {
  echo 'Нашел.';
} else {
  echo 'Ничего не нашел.';
}

Лично у меня mb_stripos не может найти слово "ПРИвет" в "всем привет !". Если кодировка текста в переменных $mystring и $findme будет windows-1251 - то конечно, нет проблем, все находит. А если текст в UTF-8, то не находит.

Автор: skyboy 9.6.2008, 20:45
Цитата(chirs99 @  9.6.2008,  16:24 Найти цитируемый пост)
Раз такие умные, напишите мне

сразу расхотелось отвечать.
пересилю себя.
1. есть кодировка ср1251. про windows-1251 слышу впервые. впрочем, все может быть.
2. вот такой код у меня работает:
Код

<?php
$mystring = iconv('cp1251','utf-8','Всем привЕТ!');
$findme = iconv('cp1251','utf-8','ПРивеТ');
if (mb_stripos($mystring,$findme,0,'utf-8') !== false) {
  echo 'Нашел.';
} else {
  echo 'Ничего не нашел.';
}
?>

обрати внимание на 4 параметр mb_stripos. 

Автор: chirs99 10.6.2008, 03:38
skyboy, извините за некоторую резкость в моих предыдущих словах, просто меня тоже обидел подход типа "ну раз мол человек такой тупой, раз рекомендации не выполняет...", правда другими словами, но суть та же.
А вообще, большое Спасибо за помощь. Все дело действительно в 4-м параметре. Как же это я сам не мог это заметить ?! Елки-палки ! Еще раз большое спасибо за помощь.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)