т.е. к примеру, запрос - "уваж тест":
найденное сообщение содержит текст: "Уважаемые коллеги!"
$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'] возвращается пустой.
Как и в Вашем примере - ничего не возвращает, т.е. переменная $row['msg_text'] возвращается пустой.
Спустя 1 минута, 36 секунд (6.10.2011 - 12:58) papa_serg написал(а):
TranceIT, проблема)
Спустя 1 минута, 15 секунд (6.10.2011 - 12:59) Winston написал(а):
А так ?
Какая у вас кодировка? UTF-8 ?
$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']);
Тем не менее - он регистрозависим.