и снова кодировка... (русский отображается везде, но работать не хочет всё равно!)

Petr

Новичок
и снова кодировка... (русский отображается везде, но работать не хочет всё равно!)

Всем доброго времени суток!
Сразу хотелось бы уточнить, что прочитал на форуме, кажется, всё, что относилось к проблеме с кодировками. В любой из проблем русские символы хоть где-нибудь, но отображаются неправильно. У меня – нет. И в phpmyadmin, и на сайте… И, в принципе, даже сравнение с регулярным выражением работает:

$pattern="/(\b".$row->name.")/";
if (preg_match($pattern,$param)) ...

Проблема в том, что работает это сравнение не полностью - $row->name (выбрано из базы) определяется и находится, а вот всякие другие спецификаторы (\b \W \w и т.д.) – никак.

Вдобавок к этому не работает модификатор /i (регистронезависимое сравнение). Не работает функция strtoupper – выдает кракозябры (квадратики).

Подскажите, пожалуйста, в чем дело. Совсем запутался.
Видимо, что-то СОВСЕМ не в порядке с кодировкой, но я не могу понять, что...
Локально (Денвер) всё работает идеально, на сервере отказывается - хоть убейся...
Локально вот такие настройки для mysql:

character set client cp1251 cp1251
character set connection cp1251 cp1251
character set database cp1251 cp1251
character set results cp1251 cp1251
character set server cp1251 cp1251
character set system utf8 utf8
character sets dir \usr\local\mysql4/share/charsets \usr\local\mysql4/share/charsets
collation connection cp1251_general_ci cp1251_general_ci
collation database cp1251_general_ci cp1251_general_ci
collation server cp1251_general_ci cp1251_general_ci
version 4.1.16-max 4.1.16-max


Настройки на сервере другие. Пробовал их менять в разных комбинациях - не помогает:

character set client utf8
(Глобальное значение) cp1251
character set connection utf8
(Глобальное значение) cp1251
character set database cp1251
character set filesystem binary
character set results utf8
(Глобальное значение) cp1251
character set server cp1251
character set system utf8
character sets dir /usr/share/mysql/charsets/
collation connection utf8_unicode_ci
(Глобальное значение) cp1251_general_ci
collation database cp1251_general_ci
collation server cp1251_general_ci
version 5.0.27
-----------------------------------------
Вопрос в том, какие они должны быть, чтобы всё работало... и в том, почему всё не работает...
У таблицы и базы данных, из которых делаю выборку - кодировка utf8_general_ci.

Пробовал SET NAMES кодировка - выдает крокозябры на всё, кроме utf8.
2-ой описанный способ (SELECT CONVERT..) пробовать нет смысла, да? В phpmyadmin символы русские...
 

cDLEON

Онанист РНРСlub
Ээээ если тебе нужна регулярка для работы с УТФ не забывай про ключ u
 

Petr

Новичок
$pattern="/(\b".$row->name.")/ui";
не помогает...
Всё равно не хочет определять гранцу слова и регистры букв...

Выгрузил полностью всю БД (заметил, что некоторые таблицы были в 1251), загрузил дамп снова - все таблицы в УТФ (точно!).

Стал работать по-другому:
раньше считал, что " слово" не соответствует данному шаблону. Теперь считает, что соответствует, но считает, что "блабласлово" тоже ему соответствует (раньше так не считал).
 

Petr

Новичок
В итоге нужно, чтобы шаблоном находились слова вида:
слово
слово!
слово,
Слово
сЛово.
и т.д.

и не находились слова:
словоблабла
блабласлово
словослово
и т.д.

Встречаю разные (противоположные!) данные в разных источниках: в одних пишут, что php изначально корректно работает с кодировкой utf8, в других пишут, что (поскольку utf8 - многобайтная кодировка), то для корректной работы с ней нужен mbstring (после этого будут работать и функции перевода регистра и функции регулярных выражений).

Кто знает точный ответ на этот вопрос? Хотя, судя по всему, если ничего не работает, то придется переставлять php вместе с mbstring'om, да?
 
Сверху