• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

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

  • Автор темы Автор темы mirra88
  • Дата начала Дата начала

mirra88

Новые
Регистрация
6 Фев 2012
Сообщения
13
Реакции
0
Баллы
0
mb_strtolower, strtolower, stripos и др. не работают с русскими символами

Уважаемые форумчане, доброго времени суток. Проблема проявилась таким образом.
Когда я ввожу в код 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 так реагируют на русскую кодировку и как этот момент можно исправить или обойти?
 
P. S. С помощью советов на других форумах проблему удалось решить таким способом:
1 В скрипт php добавила строку указывающую настройки действующие на все мульбайтовые функции:
Код:
[mb_internal_encoding("UTF-8");
2 Вместо функции stripos стала использовать mb_stripos.

Для функции mb_strtolower можно ещё явно добавить кодировку, с которой она должна работать
Код:
echo $loveTextB= mb_strtolower($B,'utf-8');
 
Молодец, что сама решила! :)

У тебя просто кодировка разная была
 
Назад
Сверху