Подскажите, пожалуйста....
Имеется такая ситуация, пользователь вводит запрос в форму поиска, а при выводе результатов в найденных строках выделяется запрашиваемое слово.
Вот так:
preg_replace('/'.$inq_find.'/i', '<b>'.$inq_find.'</b>', $arr['title'])
Где:
'/'.$inq_find.'/i' - Что искать, т.е. запрос пользователя
'<b>'.$inq_find.'</b>' - На что меняем
$arr['title'] - найденная строка, где будет меняться слово
Вроде бы все просто и понятно, но есть один важный нюанс - если пользователь укажет слово с верхним регистром, а в статье слово в нижнем, то функция конечно же совпадение найдет исправно, а вот заменит слово в нижнем регистре на то, которое пользователь ввел в верхнем, вывод получается не очень красивым. Чтобы даже если пользователь введет слово в верхнем регистре, не менять регистр в строке, просто выделять жирным, как выше в примере и все.
Подскажите, пожалуйста, как решить данную проблему!
1. WScout - 22 Октября, 2009 - 02:10:56 - перейти к сообщению
2. Furax - 22 Октября, 2009 - 06:43:28 - перейти к сообщению
CODE:
Но есть ещё вопрос: а что будет, если пользователь введёт спецсимвол RegExpовый? Полезно использовать в этом примере функцию preg_quote.
'<b>\0</b>'
3. WScout - 22 Октября, 2009 - 07:11:38 - перейти к сообщению
Ничего не будет. Сначала данные полученные от пользователя проходят конкретную проверку и урезку. Потом эти данные ищутся в базе, если ничего не находится, значит функция, которую я написал вообще выполнятся не будет. Она будет выполняться, если будет что-то в базе найдено.
4. Furax - 23 Октября, 2009 - 05:35:25 - перейти к сообщению
Тогда всё путём.
5. WScout - 25 Октября, 2009 - 12:23:00 - перейти к сообщению
Ну это конечно хорошо, только проблема осталась нерешенной.
6. Furax - 25 Октября, 2009 - 23:27:11 - перейти к сообщению
Я же говорю: вместо
CODE:
Используй'<b>'.$inq_find.'</b>'
CODE:
'<b>\0</b>'
7. WScout - 27 Октября, 2009 - 07:27:49 - перейти к сообщению
Спасибо большое за решение проблемы. Я как дурак не понял сразу первое сообщение. Я думал ты спрашивал, что будет если пользователь введет этот символ
CODE:
. И до конца не верил, что это поможет после последнего сообщения, ан нет, все оказалось просто. Осталось только выяснить одно, что он значит этот символ.
\0
8. Furax - 27 Октября, 2009 - 11:02:26 - перейти к сообщению
\0 - вся найденная подстрока;
\1, \2, ..., \N - соответственно, её части, заключённые в первые, вторые, ..., энные круглые скобки в регулярке.
\1, \2, ..., \N - соответственно, её части, заключённые в первые, вторые, ..., энные круглые скобки в регулярке.
9. WScout - 27 Октября, 2009 - 12:52:05 - перейти к сообщению
Большой респект тебе, Furax!!!!