Strict Standards: Resource ID#32 used as offset, casting to integer (32) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401

Strict Standards: Resource ID#34 used as offset, casting to integer (34) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401

Strict Standards: Resource ID#35 used as offset, casting to integer (35) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401
ТвойWeb :: Версия для печати :: Особенность при замене preg_replace
ТвойWeb » WebMaster класс » PHP/Perl » Особенность при замене preg_replace

Страниц (1): [1]
 

1. WScout - 22 Октября, 2009 - 02:10:56 - перейти к сообщению
Подскажите, пожалуйста....
Имеется такая ситуация, пользователь вводит запрос в форму поиска, а при выводе результатов в найденных строках выделяется запрашиваемое слово.
Вот так:
preg_replace('/'.$inq_find.'/i', '<b>'.$inq_find.'</b>', $arr['title'])
Где:
'/'.$inq_find.'/i' - Что искать, т.е. запрос пользователя
'<b>'.$inq_find.'</b>' - На что меняем
$arr['title'] - найденная строка, где будет меняться слово
Вроде бы все просто и понятно, но есть один важный нюанс - если пользователь укажет слово с верхним регистром, а в статье слово в нижнем, то функция конечно же совпадение найдет исправно, а вот заменит слово в нижнем регистре на то, которое пользователь ввел в верхнем, вывод получается не очень красивым. Чтобы даже если пользователь введет слово в верхнем регистре, не менять регистр в строке, просто выделять жирным, как выше в примере и все.
Подскажите, пожалуйста, как решить данную проблему!
2. Furax - 22 Октября, 2009 - 06:43:28 - перейти к сообщению
CODE:
'<b>\0</b>'
Но есть ещё вопрос: а что будет, если пользователь введёт спецсимвол RegExpовый? Полезно использовать в этом примере функцию preg_quote.
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 - соответственно, её части, заключённые в первые, вторые, ..., энные круглые скобки в регулярке.
9. WScout - 27 Октября, 2009 - 12:52:05 - перейти к сообщению
Большой респект тебе, Furax!!!!

Форум на AlfaSpace.NET


Powered by ExBB
ExBB FM 1.0 RC1 by TvoyWeb.ru
InvisionExBB Style converted by Markus®

[Script Execution time: 0.0312]     [ Gzipped ]



Notice: ob_end_flush(): failed to send buffer of ob_gzhandler (1) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/page_tail.php on line 33