PHP - маркировка текста

12
gormarket
На сайте с 29.12.2010
Offline
47
#11

Можно еще для локализации места ошибки проверить, а не попадает ли в функцию маркировки текста строка поиска с уже обрезанным первым символом ?

Может в приведенном примере уже здесь вместо ожидаемого "иван" имеется на самом деле "ван" ?

Для тестирования этого можно кроме маркировки найденного текста вывести еще и саму строку поиска, например так:

function markText ($t, $q) {

return preg_replace ("~($q)~iu", "<b style=\"color: #990000\">\\1--$q--</b>", $t);

}

Строка поиска при таком выводе будет отделена от другого текста двумя дефисами.

Товары и цены в магазинах Вашего города: Городской рынок (http://gormarket.ru/)
Ruslan203
На сайте с 23.03.2006
Offline
99
#12
gormarket:
Можно еще для локализации места ошибки проверить, а не попадает ли в функцию маркировки текста строка поиска с уже обрезанным первым символом ?
Может в приведенном примере уже здесь вместо ожидаемого "иван" имеется на самом деле "ван" ?

Для тестирования этого можно кроме маркировки найденного текста вывести еще и саму строку поиска, например так:

function markText ($t, $q) {
return preg_replace ("~($q)~iu", "<b style=\"color: #990000\">\\1--$q--</b>", $t);
}

Строка поиска при таком выводе будет отделена от другого текста двумя дефисами.

Нету там отдельного "ван", оно находит нашего Ивана но выделяет только часть его имени "ван"

Создание, продвижение сайтов (http://www.gendesign.ru) +7 (495) 5072151, icq: 915-109
IL
На сайте с 20.04.2007
Offline
435
#13
setlocale(LC_ALL,"ru_RU.utf-8");
выдало
... ru_RU.utf8

setlocale(LC_ALL,"ru_RU.utf8");
... :) Облачные серверы от RegRu - промокод 3F85-3D10-806D-7224 ( http://levik.info/regru )
Ruslan203
На сайте с 23.03.2006
Offline
99
#14
ivan-lev:
setlocale(LC_ALL,"ru_RU.utf8");

вы имеет ввиду что тут:

setlocale (LC_ALL, 'ru_RU.utf-8');

был пропущен дефис? Я его добавил но бестолку:(

---------- Добавлено 01.03.2013 в 23:31 ----------

Милованов Ю.С:
Почему не работает?
Ошибки появляются, или что?

Попробуйте прописать одну из следующих строк перед функцией markText:
setlocale(LC_ALL,"ru_RU.cp1251");
или
setlocale(LC_ALL,"ru_RU.utf-8");

Какая кодировка на сайте? Если ЮТФ-8 - попробуйте сначала конвертить строку в ВИН-1251, пропускать через preg_replace, а потом назад в ЮТФ-8.

Вот тут проблема и решилась!

Поставил setlocale(LC_ALL,"ru_RU.cp1251 вместо utf и начало искать! Ура!) Всем спасибо ребята!

bay_ebook
На сайте с 28.05.2010
Offline
111
#15
Ruslan203:
Вообщем есть сайт (справочник) в нем реализован быстрый поиск по ФИО и т д, еще есть функция подсветки того что ищешь: ввел букву "Ив" и оно выдало список с подсветкой найденных букв в имени или фамилии отчеству и т д. все это нормально работает на мастерхосте!
Перенесли проект к клиенту на выделенный сервер и там не работает подсветка у заглавных букв те :
Если ввести "иван" то подсвечивает у них только "ван" из фамилии "Иванов"
Что не включено в пхп? голову уже третий день ломаем! Сама функция с ключом:

Хм, может не совсем понял задание, но не проще тогда убрать регулярку вообще?


function markText ($t, $q) {
return preg_replace ("~($q)~iu", "<b style=\"color: #990000\">\\1--$q--</b>", $t);
}

заменить на


function markText ($t, $q){
return str_ireplace($q, '<b style="color: #990000;">'.$q.'</b>', $t);
}
Нужен прогер на php+mysql+понимание чужего кода? (/ru/forum/540660) Вам сюда PHP-шаман (http://php-shaman.pw/)
Ruslan203
На сайте с 23.03.2006
Offline
99
#16
bay_ebook:
Хм, может не совсем понял задание, но не проще тогда убрать регулярку вообще?

function markText ($t, $q) {
return preg_replace ("~($q)~iu", "<b style=\"color: #990000\">\\1--$q--</b>", $t);
}

заменить на

function markText ($t, $q){
return str_ireplace($q, '<b style="color: #990000;">'.$q.'</b>', $t);
}

В таком случае даже на мастерхосте выделение заглавных букв пропадает:))

bay_ebook
На сайте с 28.05.2010
Offline
111
#17
Ruslan203:
В таком случае даже на мастерхосте выделение заглавных букв пропадает:))

Правильно :)

Полная функция будет выглядеть примерно так:


function markText ($t, $q) {
$first = mb_substr($q, 0, 1, 'UTF-8');
$first = mb_strtoupper($first, 'UTF-8');
$first = $first.mb_substr($q, 1, strlen($q), 'UTF-8');
return str_ireplace(array($q, $first), array('<b style="color: #990000;">'.$q.'</b>', '<b style="color: #990000;">'.$first.'</b>'), $t);
}

'UTF-8' - меняем на нужную кодировку :)

Милованов Ю.С
На сайте с 24.01.2008
Offline
196
#18
Ruslan203:
Поставил setlocale(LC_ALL,"ru_RU.cp1251 вместо utf и начало искать! Ура!) Всем спасибо ребята!

Есть еще побайтовый перебор, который будет работать при любом раскладе(не встречал нерабочих случаев... наверное потому что я его юзал тока 1 раз);)

Подпись))
Ruslan203
На сайте с 23.03.2006
Offline
99
#19
bay_ebook:
Правильно :)

Полная функция будет выглядеть примерно так:

function markText ($t, $q) {
$first = mb_substr($q, 0, 1, 'UTF-8');
$first = mb_strtoupper($first, 'UTF-8');
$first = $first.mb_substr($q, 1, strlen($q), 'UTF-8');
return str_ireplace(array($q, $first), array('<b style="color: #990000;">'.$q.'</b>', '<b style="color: #990000;">'.$first.'</b>'), $t);
}

'UTF-8' - меняем на нужную кодировку :)

Да вот так работает! Кстати как сюда захерачить:

Вот ищем "Иван" он нашелся нажали пробел и чтоб четко был только иван без всяких результатов "Иванов Иванова и т д ?

Милованов Ю.С
На сайте с 24.01.2008
Offline
196
#20

Какая связь между "Иван_" и "Иванов_Иванова"?

Если так ищет - смотрите логику поиска у Вашего скрипта.

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий