Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Регистронезависимый поиск
 
 автор: AsAn   (09.01.2009 в 17:02)   письмо автору
 
 

Задача, найти в тексте, извлекаемом из БД все однокоренные слова.
Составил выражение:
$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_ALL0));
?>

  Ответить  
 
 автор: AsAn   (11.01.2009 в 00:46)   письмо автору
 
   для: 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))

в худшем случае на системе просто отсутствует такая локаль

  Ответить  
 
 автор: AsAn   (11.01.2009 в 22:09)   письмо автору
 
   для: xx7   (11.01.2009 в 14:48)
 

>в худшем случае на системе просто отсутствует такая локаль

Похоже так оно и есть. Вот ответ хостера:

Здравствуйте.
Использование Вами mb_strtolower более оправдано, чем изменение настроек
локали, что может отразится на работе с различными кодировками на других
машинах.
Мы будем заниматься этим вопросом и в скором времени найдем правильное
решение.

а print (setlocale(LC_ALL, 0)) выдаёт С и больше ничего. Причём независимо, что я указываю в setlocale при установке.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования