[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: str_ireplace замена без учёта регистра
papa_serg
Здравствуйте, возникла необходимость подсветить результаты поиска.

т.е. к примеру, запрос - "уваж тест":
найденное сообщение содержит текст: "Уважаемые коллеги!"

$data['title'] - сам запрос
$row['msg_text'] - найденное сообщение


$field = explode(" ",$data['title']);
for ($i = 0; $i < count($field); $i++){
$row['msg_text'] = str_ireplace($field[$i],"<span style='background-color: #ffcc00'>".$field[$i]."</span>",$row['msg_text']);
}


Тем не менее str_ireplace не срабатывает, т.е. не подсвечивает результаты, через регулярки тоже не получилось:
$row['msg_text'] = preg_replace("/".$field[$i]."/i", "<span style='background-color: #ffcc00'>".$field[$i]."</span>", $row['msg_text']);


Подскажите в чём ошибка, как убрать регистрозависимость. Спасибо.



Спустя 22 минуты, 1 секунда (6.10.2011 - 12:40) TranceIT написал(а):
Проблема с кириллицей, с латиницей нормально работает. В чем проблема не знаю, тоже интересно...

Спустя 4 минуты, 34 секунды (6.10.2011 - 12:45) TranceIT написал(а):
Сообщение с форума Yiiframework:
Цитата
Чтобы str_ireplace работал с кириллицей необходимо настроить локаль или если это сделать не удается (как показывает практика почему-то не на всех хостингах локаль возможно настроить) использовать какие-то ухищрения - например вначале переводить текст к нижнему регистру отдельно написанной функцией и потом применять str_ireplace.

Однако погуглив могу сказать, что в большинстве случаев используются регулярки, т.к. они оказываются быстрее чем ireplace. В регулярках мало понимаю...

Спустя 3 минуты, 14 секунд (6.10.2011 - 12:48) Winston написал(а):
$row['msg_text'] = preg_replace("/(".$field[$i].")/iu", "<span style='background-color: #ffcc00'>\\1</span>", $row['msg_text']);

Спустя 8 минут, 38 секунд (6.10.2011 - 12:57) papa_serg написал(а):
Winston, пробовал через - u.
Как и в Вашем примере - ничего не возвращает, т.е. переменная $row['msg_text'] возвращается пустой.

Спустя 1 минута, 36 секунд (6.10.2011 - 12:58) papa_serg написал(а):
TranceIT, проблема)

Спустя 1 минута, 15 секунд (6.10.2011 - 12:59) Winston написал(а):
А так ?
$row['msg_text'] = preg_replace("/(".$field[$i].")/iu", "<span style='background-color: #ffcc00'>".$field[$i]."</span>", $row['msg_text']);

Какая у вас кодировка? UTF-8 ?

Спустя 1 минута, 44 секунды (6.10.2011 - 13:01) papa_serg написал(а):
Winston, то же самое. Нет, не UTF - windows-1251

Спустя 1 минута, 54 секунды (6.10.2011 - 13:03) Winston написал(а):
Цитата (papa_serg @ 6.10.2011 - 13:01)
Нет, не UTF - windows-1251

Тогда попробуй опять этот пример, только убери модификатор u

Спустя 2 минуты, 53 секунды (6.10.2011 - 13:06) papa_serg написал(а):
Winston, к сожалению, опять - нет. Текст выводится, но не заменяется.
Я в первом сообщении уже пробовал нечто подобное.

Спустя 1 минута, 57 секунд (6.10.2011 - 13:08) Winston написал(а):
Какие у тебя там данные ?
print_r($field);

Спустя 2 минуты, 50 секунд (6.10.2011 - 13:11) papa_serg написал(а):
Array ( [0] => уваж )

Хотелось бы отметить, что совпадения с одинаковым регистром отлично подсвечиваются - т.е. если в поиске ввести "п р и", то подсветятся все данные буквы в нижнем регистре, в верхнем - нет.

Спустя 4 минуты, 9 секунд (6.10.2011 - 13:15) Winston написал(а):
Цитата (papa_serg @ 6.10.2011 - 13:11)
то подсветятся все данные буквы в нижнем регистре, в верхнем - нет.

Для того, чтобы решить это нужно использовать модификатор i

Спустя 1 минута, 12 секунд (6.10.2011 - 13:16) papa_serg написал(а):
Winston, так он используется)
Вот, Ваш пример:
$row['msg_text'] = preg_replace("/(".$field[$i].")/i", "<span style='background-color: #ffcc00'>\\1</span>", $row['msg_text']);

Тем не менее - он регистрозависим.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.