При переносе сайта на другой хостинг столкнулся с неожиданной проблемой.
PHP-функция mb_strtoupper() не переводила строку на русском языке в верхний регистр, и заменяла некоторые символы знаками вопроса:
Сначала думал проблема с кодировкой в 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");