Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

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

70K
25 апреля 2013 года
mirra88
7 / / 24.04.2013
Уважаемые форумчане, доброго времени суток. Проблема проявилась таким образом.
Когда я ввожу в код 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 так реагируют на русскую кодировку и как этот момент можно исправить или обойти?
1
25 апреля 2013 года
kot_
7.3K / / 20.01.2000
вероятно потому, что надо явно задать кодировку. И сервер должен отдавать контент в UTF-8.

 
Код:
$str = mb_strtolower($str, 'UTF-8');
P.S. Используйте нормальный инструмент для разработки
70K
25 апреля 2013 года
mirra88
7 / / 24.04.2013
Спасибо. Но явно можно указать кодировку только для mb_strtolower... А есть ещё stripos и mb_stripos. В общем, с помощью советов на этом и других форумах, проблему удалось решить таким способом:
1 В скрипт php добавила строку указывающую настройки действующие на все мульбайтовые функции:
 
Код:
mb_internal_encoding("UTF-8");
2 Вместо функции stripos стала использовать mb_stripos.
327
25 апреля 2013 года
UserNet2008
748 / / 03.04.2010
Цитата:
kot_


Пользуюсь случаем и хочу спросить Вас
Если я создаю html-документ
прописываю в нём charset= UTF-8
запускаю файл в браузере и вижу типа такова ��� �����
Теперь сам html-файл сохраняю КАК UTF-8, теперь всё в порядке.
Сам вопрос
Но почему-то некоторые html-файлы сохранены Как ASCII и в html-документе указан charset= utf-8 тоже работают нормально.
Не могу, понять из-за чего это происходит?
Думаю это связанно с шрифтами или редактором.

70K
25 апреля 2013 года
mirra88
7 / / 24.04.2013
По-поводу вопроса UserNet2008, я, конечно, не спец в делах кодировки. Но в статье: http://lifeexample.ru/php-primeryi-skriptov/php-kodirovka-stranitsyi.html приведено аж четыре условия, которые нельзя упускать из виду для получения корректных кодировок. Возможно Вы просто не учитываете какое-то из этих четырёх условий?
327
25 апреля 2013 года
UserNet2008
748 / / 03.04.2010
Цитата: mirra88
По-поводу вопроса UserNet2008, я, конечно, не спец в делах кодировки. Но в статье: http://lifeexample.ru/php-primeryi-skriptov/php-kodirovka-stranitsyi.html приведено аж четыре условия, которые нельзя упускать из виду для получения корректных кодировок. Возможно Вы просто не учитываете какое-то из этих четырёх условий?


Это не то там не идет речи об самом файле как он сохранен на диске.

20K
25 апреля 2013 года
ellor!
198 / / 24.05.2012
Цитата: UserNet2008
Но почему-то некоторые html-файлы сохранены Как ASCII и в html-документе указан charset= utf-8 тоже работают нормально.
Не могу, понять из-за чего это происходит?
Думаю это связанно с шрифтами или редактором.


Небось, английские символы выводятся нормально, а русские нет?

8
25 апреля 2013 года
mfender
3.5K / / 15.06.2005
Цитата: ellor!
Небось, английские символы выводятся нормально, а русские нет?


))))) Браво, Кэп!

327
25 апреля 2013 года
UserNet2008
748 / / 03.04.2010
Цитата: ellor!

Небось, английские символы выводятся нормально, а русские нет?


Вроде сегодня не 1 апреля.

1
25 апреля 2013 года
kot_
7.3K / / 20.01.2000
Цитата: UserNet2008

Сам вопрос
Но почему-то некоторые html-файлы сохранены Как ASCII и в html-документе указан charset= utf-8 тоже работают нормально.
Не могу, понять из-за чего это происходит?
Думаю это связанно с шрифтами или редактором.


Это может происходить например если кодовая страница установленная в браузере клиента совпадает с кодировкой файла. В таком случае браузер клиента игнорирует установленный charset - он выводит страницу в той кодировке, в которой ему приказали.

327
27 апреля 2013 года
UserNet2008
748 / / 03.04.2010
Цитата:
Это может происходить например если кодовая страница установленная в браузере клиента совпадает с кодировкой файла. В таком случае браузер клиента игнорирует установленный charset - он выводит страницу в той кодировке, в которой ему приказали.


Я правильно понял кодировка файла - это ASCII или UTF-8 в плане как он сохранен на диске.
А вот тут Вы меня озадачили игнорирует установленный charset, если charset прописан, то браузер ну никак не может его игнорировать. Другое дело если charset не прописан, вот тогда браузер пытается подставить кодировку страницы. Честно сказать браузеру по барабану как сохранены файлы на диске в ASCII или UTF-8 т.к разметка документа сохраняется, что в ASCII или UTF-8 . Это должен делать программист как сохранять файл. Или что я не понял.

P.S
Это по HTML-документу. Если charset= utf-8 тогда сохранить файл Как UTF-8. И не ломать голову.
По поводу моего вопроса так оказалось все просто. Т.е наличие или отсутствия Unicode в тексте.
И ещё в макете есть шрифты, которые просто не поддерживают Русский.

8
27 апреля 2013 года
mfender
3.5K / / 15.06.2005
Автор изначально приводит настойки своего апача:

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


При этом есть ещё некая БД, у которой тоже есть кодировки.

В данном случае хотелось бы посоветовать лишь привести кодировку БД к нужному. Например при помощи SET NAMES utf8 при каждом подключении к БД.
327
27 апреля 2013 года
UserNet2008
748 / / 03.04.2010
Цитата: mfender
Автор изначально приводит настойки своего апача:


Всё правильно.
Это я изначально не правильно сделал мне нужно было открыть свою тему, а теперь получилась тема в теме, виноват(или мой косяк).
Я хотел спросить про HTML-документ. И Apache-сервер не при делах, относительно моего вопроса.
Хотя уже не важно, примерный курс по созданию HTML-документа на Русском, мне понятен.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог