Программирование > PHP

mb_strtolower, strtolower, stripos и др. не работают с русскими символами

(1/1)

mirra88:
Уважаемые форумчане, доброго времени суток. Проблема проявилась таким образом.
Когда я ввожу в код php строки, то они выводятся на экран нормально, но стоит обработать их функциями mb_strtolower, strtolower, stripos и некоторыми другими и строки сразу же превращаются в вопросы. Например если я введу:

--- Код: ---$A="мяч";
echo $B="Наш мячик очень оригинальный!";
--- Конец кода ---
то $B в таком же виде, как я ввела и будет отображена на экране. Но уже попытка преобразовать строку к нижнему регистру:

--- Код: ---echo $loveTextB= mb_strtolower($B);
--- Конец кода ---
приведёт к тому, что на экране $loveTextB отобразится вот так:  ��� ����� ����� ������������!
В итоге результат работы функций непредсказуем. Например, попытка найти первую  позиции вхождения в $B  подстроки $A:

--- Код: ---echo $pos=stripos($loveTextB, $loveTextA);
--- Конец кода ---
или
--- Код: ---echo $pos=stripos($B, $A);
--- Конец кода ---
приведёт к выводу числа 7, что абсолютно не соответствует действительности. И я подозреваю, что это из-за этой вот петрушки с кодировками. Потому что если я перехожу на английский регистр, то всё становится нормально. И перевод к нижнему регистру строку не меняет и номера позиций правильно выдаются.

Тестирую на Denver, PHP Version 5.2.12. В настройках сервера стоит:

--- Код: ---character_set_client utf8
character_set_connection utf8
character_set_database cp1251
character_set_filesystem binary
character_set_results utf8
character_set_server cp1251
character_set_system utf8
--- Конец кода ---
Кодировка в разделе для мета тегов указана:
--- Код: ---<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> ;
--- Конец кода ---
В cкрипте настроек php прописаны команды:
--- Код: ---header('Content-Type: text/html; charset= utf-8');
--- Конец кода ---
и
--- Код: ---setlocale(LC_ALL, 'Russian_Russia.65001');
--- Конец кода ---
Подключен файл .htaccess со строкой: 
--- Код: ---AddDefaultCharset utf-8
--- Конец кода ---
Никто не знает почему некоторые функции php так реагируют на русскую кодировку и как этот момент можно исправить или обойти?

mirra88:
С помощью советов на форумах проблему удалось решить таким способом:
1 В скрипт php добавила строку указывающую настройки действующие на все мульбайтовые функции:
--- Код: ---mb_internal_encoding("UTF-8");
--- Конец кода ---
2 Вместо функции stripos стала использовать mb_stripos.

Для функции mb_strtolower можно ещё явно добавить кодировку, с которой она должна работать

--- Код: ---echo $loveTextB= mb_strtolower($B,'utf-8');
--- Конец кода ---

Навигация

[0] Главная страница сообщений

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 
Перейти к полной версии