LIKE, REPLACE, str_replace - снова проблемы чувствительности к регистру

AVKr

Guest
LIKE, REPLACE, str_replace - снова проблемы чувствительности к регистру

php - 4.3.8, MySQL - 4.0.17. Задача, вроде бы, банальная и много раз так или иначе обсуждалась. А решить не могу.

Функция поиска. Пользователь задает строку и через

... WHERE table1.field1 LIKE '%строка%'...

получает результат. Все нормально. Захотелось, чтобы в итоговой выборке подстрока поиска выделялась цветом-фоном, как это часто встречается. Но натолкнулся на то, что LIKE работает регистронезависимо (как и полагается), а str_replace и REPLACE, которыми я попробовал пользоваться для вставки выделяющих тэгов, - регистрозависимо.

Как же быть? str_ireplace - не подходит, т.к. php - 4-ый. Есть ли варианты корректного решения проблемы?
 

AVKr

Guest
Спасибо, помогло! Плохо документацию смотрел... Там даже готовый пример был.

-~{}~ 22.09.05 19:00:

Помогло-то помогло, но обнаружились новые грабли. Сделал (т.е. слизал и упростил) "сложнейшую" функцию:

---
Function FindRepl($strTxt, $strFind)
{
$strPattern = "/($strFind)/is";
$strRepl = '<span class="FindText">\\1</span>';
return preg_replace($strPattern,$strRepl,$strTxt);

}

---

Запустил в оборот у себя на отладочном сервере. Работает безукоризненно - выделяет подстроки независимо от регистра. Порадовался и положил на рабочий сервер (от в штатах расположен). И вся радость кончилась - выделяются только подстроки точно совпадающие по регистру.

Полагаю, проблемы регистра умножились на какие-то национальные настройки? Как бы это обойти при условии, что к настройкам сервера я доступа не имею?
 

440hz

php.ru
Автор оригинала: AVKr
Полагаю, проблемы регистра умножились на какие-то национальные настройки? Как бы это обойти при условии, что к настройкам сервера я доступа не имею?
выставить локаль правильную? 8)
 

woodfairy

Новичок
--------------------------------------------------------------------------------

выставить локаль правильную? 8)

--------------------------------------------------------------------------------

Спасибо! Заработало!

--------------------------------------------------------------------------------

Вы общаетесь на каком-то ином уровне или я не умею читать между строк? :) Я в замешательстве. Что значит выставить локаль правильную? Как это сделать?
 

woodfairy

Новичок
Спасибо за ответ, я уже успела и по форуму посмотреть. Только непонятно, как узнать, какая локаль через функции php. Конкретно, мне нужно узнать, какая кодировка по умолчанию используется на сервере и в эту кодировку с помощью iconv кодировать.

-~{}~ 24.03.06 12:01:

Прошу прощения за лишние вопросы, нашла.

-~{}~ 24.03.06 13:02:

Я посмотрела, как через setlocal посмотреть значение локали. Правда, остается один нерешенный вопрос.

Если setlocal(LC_ALL, NULL) вернет мне Russian_Russia.1251, то я могу со стопроцентной точностью утверждать, что текстовый файл с кодировкой win-1252 отобразится в блокноте нормально?

А если результат
LC_COLLATE=German_Germany.65001;LC_CTYPE=Russian_Russia.1251;LC_MONETARY=German_Germany.65001;LC_NUMERIC=German_Germany.65001;LC_TIME=German_Germany.65001
Можно утверждать, что файл в utf-8 прочитается или все же нет?

А цифры всегда присутствуют в ответе, чтобы по ним можно было однозначно идентифицировать кодировку?

То есть меня интересует, как точно определить используемую кодировку, чтобы в ней сохранить текстовый файл.

Заранее спасибо за ответ.
 
Сверху