PHPFAQ  
Начинающим   Технологии   MySQL   PDO   Ошибки   Ссылки   Юмор   Форум   SafeMySQL  
-- Список сообщений -- Поиск --
stripos и др. не работают с русскими символами
Татьяна 25.04.13 10:25
Проблема проявилась таким образом.
Когда я ввожу в код php строки, то они выводятся на экран нормально, но стоит обработать их функциями mb_strtolower, strtolower, stripos и некоторыми другими и строки сразу же превращаются в вопросы. Например если я введу:
[code]$A="мяч";
echo $B="Наш мячик очень оригинальный!"; [/code]
то $B в таком же виде, как я ввела и будет отображена на экране. Но уже попытка преобразовать строку к нижнему регистру:
[code]echo $loveTextB= mb_strtolower($B); [/code]
приведёт к тому, что на экране $loveTextB отобразится вот так: ��� ����� ����� ������������!
В итоге результат работы функций непредсказуем. Например, попытка найти первую позиции вхождения в $B подстроки $A:
[code]echo $pos=stripos($loveTextB, $loveTextA);[/code] или [code]echo $pos=stripos($B, $A);[/code]
приведёт к выводу числа 7, что абсолютно не соответствует действительности. И я подозреваю, что это из-за этой вот петрушки с кодировками. Потому что если я перехожу на английский регистр, то всё становится нормально. И перевод к нижнему регистру строку не меняет и номера позиций правильно выдаются.

Тестирую на Denver, PHP Version 5.2.12. В настройках сервера стоит:
[code]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[/code]
Кодировка в разделе для мета тегов указана: [code]<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> ;[/code]
В cкрипте настроек php прописаны команды: [code]header('Content-Type: text/html; charset= utf-8'); [/code] и [code]setlocale(LC_ALL, 'Russian_Russia.65001');[/code]
Подключен файл .htaccess со строкой: [code]AddDefaultCharset utf-8[/code]
А почему некоторые функции php так реагируют на русскую кодировку и как этот момент можно исправить или обойти?
ответить
Татьяна 25.04.13 13:24
Проблему удалось решить

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

Для функции mb_strtolower можно ещё явно добавить кодировку, с которой она должна работать
echo $loveTextB= mb_strtolower($B,'utf-8');
ответить
phpfaq 25.04.13 18:03
Все правильно, дело было в mb_ функциях

Рад, что все получилось :)
ответить
Написать
Имя:*
Заголовок:*
Вы робот?
Текст:
Пожалуйста, воздержитесь от посылки спама.
Сообщения, содержащие гиперссылки, проходят премодерацию.

© phpfaq.ru, 2019 1558955614.006 sec. О сайте   Хостинг iHor.ru