Решение проблем букв «ш» и «И» и белого экрана в WordPress
Итак имеем две распространенные проблемы. Первая из них - известная проблема букв «ш» и «И». В принципе раньше я сталкивался с подобным, и даже помню рецепт решения - добавление строчки
mysql_query("SET NAMES 'utf8'");
после коннекта к БД.
Сначала удивило то, что в файле /wp-includes/wp-db.php есть такая строчка, правда она генерируется в скрипте при некоторых условиях. Стал проверять все настройки кодировок. Всюду, и в таблицах БД и в .htaccess и в файле /wp-config.php установлена кодировка UTF-8. Правда, в папке сервера cgi-bin там тоже есть файл .htaccess, и в нем кодировка была другая, ее тоже выставил правильно, но и это не помогло. Перерыл весь гугл в поисках подобной проблемы. Пришел к выводу что хоть и в базе всюду светится кодировка UTF-8, сама по себе БД видать установлена на сервере с другой кодировкой. Но почему же тогда SET NAMES не срабатывает в оригинальном скрипте?
Я попробовал было пройтись по логике скрипта, его условиях, вызовах функций и т.д. Но честно говоря стало лень копать логику до конца а попробовал добавить строку
mysql_query("SET NAMES 'utf8'");
в код после условия
if ( $this->has_cap( 'collation' ) ) { ... }
а само условие закомментировать. После этого буквы ш-И стали отображаться.
Проблема белого экрана возникла после решения проблемы ш-И. Все что постится из админки вызывало появление пустой страницы во время работы скрипта post.php. Причем данные сохранялись и на сайте отображались. Понапрягался на гугле, пробовал применять различные советы. Одно понял сразу, судя по постам в различных форумах - эта проблема может быть вызвана различными причинами. Единого рецепта нету. Свою проблему решил почти случайно. Когда на одном из форумов узрел намек на то что может быть повреждена целостность какого-нибудь файла, я вспомнил что когда правил файл wp-db.php в редакторе TextWrangler, он предложил пересохранить файл в кодировку юникода. Из-за кавычек, которых я скопировал из форума вместе с кодом. Кавычки почему-то апострофами оказались. Кавычки то я исправил, но чисто механически согласился на сохранение в юникоде. Не знаю почему, но WP этот формат видимо не воспринял как надо, или может там втесались какие-нибудь лишние символы. И когда я скопировал текст скрипта и пересохранил в другом редакторе - TextMate, после этого белый экран не появлялся.
Попробуем подытожить. Обе проблемы, очевидно, в моем случае имели один и тот же корень - проблему с кодировками. Происходит это по видимому из-за того что одни переходят на универсальный стандарт - UTF-8, но вот другие не хотят менять привычки и остаются с cp1251. Вот и получаются конфликты между движками, серверами, базами данных и всяким ПО.
