|
|
|
| Задача, найти в тексте, извлекаемом из БД все однокоренные слова.
Составил выражение:
$pr=preg_match_all('/\s([^\s]*'.$sub.'[^\s]*)/is', $text, $q);
|
где
$sub-корень слова,
$text-сам текст,
$q-массив с результатом.
Всё прекрасно работало на локальной машине под Windows, но после загрузки на сервер, поиск стал регистрозависимым. То есть если переменная $sub содержит слово "Стол", в тексте находятся слова содержащии заглавную букву С, хотя модификатор i в рег. выражении указан.
Подскажите, сделать поиск регистронезависимым? | |
|
|
|
|
автор: xx7 (10.01.2009 в 16:25) |
|
|
для: AsAn
(09.01.2009 в 17:02)
| | В какой кодировке получаете текст?
Какая локаль на сервере?
<pre><?$text = 'вороны своры жаворонки';
$sub='вОр';
preg_match_all('/\s(\S*'. $sub .'[^\s[:punct:]]*)/i',
' '. $text, $q);
print_r($q);
?><hr><?
print_r(setlocale(LC_ALL, 0));
?>
|
| |
|
|
|
|
|
|
|
для: xx7
(10.01.2009 в 16:25)
| | Кодировка win-1251, пробовал setlocale(LC_ALL, "ru_RU.CP1251") бесполезно. Решил перевести все символы в нижний регистр, но на хостинге отказалась работать ф-ия strtolower. Сейчас частично проблему решил с помошью mb_strtolower, но хотелось бы настроить регистронезависимый поиск. Функция mb_eregi у хостера тоже не работает. Oперационка на хостинге FreeBSD. Проблема только с кириллицей. | |
|
|
|
|
автор: xx7 (11.01.2009 в 14:48) |
|
|
для: AsAn
(11.01.2009 в 00:46)
| | Возможно в лучшем случае просто не угадали имя локали ,
setlocale может принимать например массив в качестве второго параметра
, попробуйте добавить побольше вариантов
setlocale(LC_ALL, array('ru_RU.1251', 'rus_RUS.1251', 'Russian_Russia.1251'));
и потом изменяется-ли посмотрите при помощи
print (setlocale(LC_ALL, 0))
в худшем случае на системе просто отсутствует такая локаль | |
|
|
|
|
|
|
|
для: xx7
(11.01.2009 в 14:48)
| | >в худшем случае на системе просто отсутствует такая локаль
Похоже так оно и есть. Вот ответ хостера:
Здравствуйте.
Использование Вами mb_strtolower более оправдано, чем изменение настроек
локали, что может отразится на работе с различными кодировками на других
машинах.
Мы будем заниматься этим вопросом и в скором времени найдем правильное
решение.
а print (setlocale(LC_ALL, 0)) выдаёт С и больше ничего. Причём независимо, что я указываю в setlocale при установке. | |
|
|
|