PHP — кодировка в mb_strtoupper()

При переносе сайта на другой хостинг столкнулся с неожиданной проблемой.

PHP-функция mb_strtoupper() не переводила строку на русском языке в верхний регистр, и заменяла некоторые символы знаками вопроса:

php_encoding1Хотя должно быть так:

php_encoding2Сначала думал проблема с кодировкой в Mysql или в выдаваемых страницах, однако везде была прописана кодировка UTF-8:

В <HEAD>:

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta charset="UTF-8">

В .htaccess

AddDefaultCharset UTF-8

Оказалось что дело в функции

mb_strtoupper ( string $str [, string $encoding = mb_internal_encoding() ] ).

Если ее использовать без второго аргумента, то кодировка будет браться внутренняя из php (ее можно посмотреть функцией mb_internal_encoding() ). Если указать явно вторым аргументом «UTF-8», то строка будет нормально переводиться в верхний регистр. Чтобы сделать это для всех вызовов этой функции, можно один раз вначале запустить

mb_internal_encoding("UTF-8");

 

 

 

 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *