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

12
Ruslan203
На сайте с 23.03.2006
Offline
99
1192

Вообщем есть сайт (справочник) в нем реализован быстрый поиск по ФИО и т д, еще есть функция подсветки того что ищешь: ввел букву "Ив" и оно выдало список с подсветкой найденных букв в имени или фамилии отчеству и т д. все это нормально работает на мастерхосте!

Перенесли проект к клиенту на выделенный сервер и там не работает подсветка у заглавных букв те :

Если ввести "иван" то подсвечивает у них только "ван" из фамилии "Иванов"

Что не включено в пхп? голову уже третий день ломаем! Сама функция с ключом:

function markText ($t, $q) {
return preg_replace ("~($q)~iu", "<b style=\"color: #990000\">\\1</b>", $t);
}
Создание, продвижение сайтов (http://www.gendesign.ru) +7 (495) 5072151, icq: 915-109
Милованов Ю.С
На сайте с 24.01.2008
Offline
196
#1

НЕ самый правильный вариант:


function markText ($t, $q) {
$q = iconv('utf-8', 'windows-1251', $q);//Если кодировка ЮТФ-8, иначе убрать
$q = ucfirst($q);
$q = iconv('windows-1251', 'utf-8', $q);//Если кодировка ЮТФ-8, иначе убрать
return preg_replace ("~($q)~iu", "<b style=\"color: #990000\">\\1</b>", $t);
}

Какая версия ПХП была на старом хостинге и какая здесь?

Подпись))
Ruslan203
На сайте с 23.03.2006
Offline
99
#2

Да вы гений! Задам тогда еще пару вопросов:

Как сделать приоритет при поиске? Имеется искать сначала по определенному полю, далее по другим...

код:


function markText ($t, $q) {
$q = iconv('utf-8', 'windows-1251', $q);//Если кодировка ЮТФ-8, иначе убрать
$q = ucfirst($q);
$q = iconv('windows-1251', 'utf-8', $q);//Если кодировка ЮТФ-8, иначе убрать
return preg_replace ("~($q)~iu", "<b style=\"color: #990000\">\\1</b>", $t);
}
$query = R('DJEM')->GetForeach();
$query->Path('<['main.users']._id>.$');
$query->Limit(20);


$queryParams = array();
$queryValues = array();

if (empty ($_REQUEST ['term'])) die ("Ничего не найдено");
if (!empty($_REQUEST['term'])) {
$queryStr = trim(strip_tags($_REQUEST['term']));
$queryStr = str_replace (array ('!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '[', ']', '{', '}', '_', '-', '=', '+', ':', ';', '<', '>', '"', "'", '?', '~', '|', '/', '\\'), '', $queryStr);
if ($queryStr == '') die ("Ничего не найдено");
$queryParams[] = '_name like "%?%"';
$queryParams[] = 'doljnost like "%?%"';
$queryValues[] = $queryStr;
$queryValues[] = $queryStr;

$queryPhone = preg_replace ('~\D~', '', $queryStr);
if (!empty($queryPhone)) {
$queryParams[] = 'phone like "%?%"';
$queryParams[] = 'dob1 like "%?%"';
$queryValues[] = $queryPhone;
$queryValues[] = $queryPhone;
}
}

if (count($queryParams)) {
$query->Where(join(' || ', $queryParams), $queryValues);
}

// if ($queryPhone == '') $queryPhone = "5843209284352348709857423048975";
{{$query->Where('(_name like "%?%") || (phone like "%?%") || (doljnost like "%?%") || (dob1 like "%?%") ', $queryStr, $queryPhone, $queryStr, $queryPhone);}}
{{$query->Where('_name like "%?%" || phone like "%?%" || doljnost like "%?%" || dob1 like "%?%" ', $queryStr, $queryPhone, $queryStr, $queryPhone);}}
if ($query -> size () != 0) {
echo "<ul>";
foreach ($query as $q)
echo '<li><a href="' . $q -> _url . '"><span>' . markText ($q->_name, $queryStr) . '</span></a>' . ($q->doljnost == '' ? '' : ', ' . markText ($q->doljnost, $queryStr)) . ($q->phone == '' ? '' : ', ' . markText (preg_replace ('/^(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*/','$1 ($2$3$4) $5$6$7-$8$9-$10$11', $q->phone), $queryStr)) . ($q->dob1 == '' ? '' : ', ' . markText (preg_replace ('/^(\d)\D*(\d)\D*(\d)\D*(\d)\D*/','$1$2-$3$4 ', preg_replace ('/^(\d)\D*(\d)\D*(\d)\D*/','$1-$2$3 ', $q->dob1)), $queryStr)) . "</li>";

echo "</ul>";
} else {
echo "<center>Не найдено ни одного сотрудника.</center>";
}

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

---------- Добавлено 01.03.2013 в 16:55 ----------

Милованов Ю.С:
НЕ самый правильный вариант:

function markText ($t, $q) {
$q = iconv('utf-8', 'windows-1251', $q);//Если кодировка ЮТФ-8, иначе убрать
$q = ucfirst($q);
$q = iconv('windows-1251', 'utf-8', $q);//Если кодировка ЮТФ-8, иначе убрать
return preg_replace ("~($q)~iu", "<b style=\"color: #990000\">\\1</b>", $t);
}


Какая версия ПХП была на старом хостинге и какая здесь?

На старом PHP Version 5.2.17 (мастерхост)

Туда куда перенесли: PHP Version 5.2.8

---------- Добавлено 01.03.2013 в 17:03 ----------

Рано радовался, не работает оказывается:(

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

Почему не работает?

Ошибки появляются, или что?

Попробуйте прописать одну из следующих строк перед функцией markText:

setlocale(LC_ALL,"ru_RU.cp1251");

или

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

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

Ruslan203
На сайте с 23.03.2006
Offline
99
#4
Милованов Ю.С:
Почему не работает?
Ошибки появляются, или что?

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

Это у меня стояло изначально, ошибок никаких нет, просто большие буквы не подсвечивает, я вот думал может какая то хрень отключена в пхп ?

почему ключ u не фурычит?

---------- Добавлено 01.03.2013 в 17:11 ----------

Милованов Ю.С:


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

На сайте все в UTF-8

А что значит конвертировать?

SK
На сайте с 31.08.2007
Offline
81
#5

если оно частично подсвечивает значит врятли в кодировке дело. тут какаето проблема именно с заглавными, с локалью покрутить можно. или из регулярки убрать u модификатор, может поможет, может он наоборот лишний =)

Нужен перенос информации? Информеры на сайт? Сграбить контент? Создать базу товаров? Изготовление любых парсеров! (/ru/forum/836197)
Ruslan203
На сайте с 23.03.2006
Offline
99
#6
Silent_Kill:
если оно частично подсвечивает значит врятли в кодировке дело. тут какаето проблема именно с заглавными, с локалью покрутить можно. или из регулярки убрать u модификатор, может поможет, может он наоборот лишний =)

Напишите что на что менять, попробую:)

IL
На сайте с 20.04.2007
Offline
435
#7
Ruslan203:
я вот думал может какая то хрень отключена в пхп ?
Ruslan203:
Перенесли проект к клиенту на выделенный сервер

Скорее не в PHP

Если в шелле выполнить locale -a - что выдаст? Вот то, что выдаст (с UTF-8) и использовать в setlocale (до операций со строками). Если не выдаст - конфигурировать локали. В Debian-дистрибутивах dpkg reconfigure locales

... :) Облачные серверы от RegRu - промокод 3F85-3D10-806D-7224 ( http://levik.info/regru )
Ruslan203
На сайте с 23.03.2006
Offline
99
#8
ivan-lev:
Скорее не в PHP

Если в шелле выполнить locale -a - что выдаст? Вот то, что выдаст (с UTF-8) и использовать в setlocale (до операций со строками). Если не выдаст - конфигурировать локали. В Debian-дистрибутивах dpkg reconfigure locales

Выдало:

ru_RU

ru_RU.cp1251

ru_RU.koi8r

ru_RU.utf8

---------- Добавлено 01.03.2013 в 21:56 ----------

Если выполнить запрос show variables like 'char%'; на выделенном сервере:

| character_set_client | latin1 |

| character_set_connection | latin1 |

| character_set_database | latin1 |

| character_set_filesystem | binary |

| character_set_results | latin1 |

| character_set_server | latin1 |

| character_set_system | utf8 |

| character_sets_dir | /usr/share/mysql/charsets/

На мастрехосте:

| character_set_client | cp1251 |

| character_set_connection | cp1251 |

| character_set_database | cp1251 |

| character_set_filesystem | binary |

| character_set_results | cp1251 |

| character_set_server | cp1251 |

| character_set_system | utf8 |

| character_sets_dir | /usr/local/share/mysql/charsets/ |

Это может как то повлиять?

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

Для начала сделайте как на мастерхосте(я не удивлюсь, если Вы до сих пор ждете ответа и еще сами не попробывали).

Перед работой с базой делайте запрос mysql_query("SET NAMES utf8")

Ruslan203
На сайте с 23.03.2006
Offline
99
#10
Милованов Ю.С:
Для начала сделайте как на мастерхосте(я не удивлюсь, если Вы до сих пор ждете ответа и еще сами не попробывали).
Перед работой с базой делайте запрос mysql_query("SET NAMES utf8")

В коде пхп вы имеете ввиду?

На обеих серверах же таблицы в utf... или это значения не имеет?

И куда вставить этот mysql_query("SET NAMES utf8") ?

12

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