Как вылечить UTF ...
... может стоить больших нервов. При переезде на новый хост на днях буквально, случилось то, что обычно случается. База блога отобразилась кракозыбрами. Воевали мы долго, но победили. Дело вот в чем.
Любая версия phpmyadmin конектиться к базе в дефолтной collation мускуля, как правило это latin_1. А мы хотим UTF. Вот и получаются в базе кракозябры и как следствие при переезде на новый хост неправильный дамп базы и тут начинаются проблемы.
На некоторых хостах может спасти вот это в .htaccess:
AddDefaultCharset utf8
CharsetDefault utf8
CharsetSourceEnc utf8
Однако этого мало. Проверьте свою базу через phpmyadmin, наверняка в ней кракозябры. В таком случае Вам поможет следующее.
Ищем замечательную программку под названием Navicat. Эта програмка может конектиться к базе так, как ей скажешь. Подключение настраивается через SSH. Смотрите скриншоты (раз, два, три). Установить всё как там есть и можете подсоединяться. 90% что теперь Вы увидите свою базу на родном языке. Если нет, то нужно что-то придумывать.
Делаем dump базы через эту прогу, сохраняя в текстовый файл. Затем нужно будет открыть этот дамп в текстовом редакторе. Блокнот-подобные оставьте для других целей. Я использовал Dreamweaver 8.
В этом файле нужно сменить все Latin_1 на utf8. В DW8 это делается нажатием CTRL+F (найти и заменить). После этого сохраняете файл и грузитесь через phpmyadmin.
В phpmyadmin первым делом ставите collation mysql utf_unicode_ci. И в созданной для блога базе (пока еще ничего не импортируем, она должна быть пустая) меняем (скорее всего именно «меняем») в Operations latin_1 на utf_unicode_ci.
Если в конце не полчиться, то смените db collation на utf_general_ci
А вот теперь можно заливать отредактированную базу. Это еще не всё. Идём в папку wp-includes нашего блога и открываем в текстовом редакторе файл wp-db.php, в котором ищем строку примерно 57. В этой строке написано:
$this->select ($dbname);
Добавляем следующей строчкой SET NAMES и у нас получиться такое:
$this->select ($dbname);
$this->query («SET NAMES utf8»);
Естественно, залейте его обратно на хост. А теперь можете заходить на главную страницу своего WP-блога и наслаждаться. Если зайдете в phpmyadmin, то там база тоже будет на русском. Поздравляю, Вы справились.
ps. За помощь и советы отдельное спасибо Владимиру и InsaneX.
Вам могут быть также интересны записи по этой теме:
Переезд с Blogger на Wordpress
Как я перевел блог на UTF-8

Столько хлопот. Они тогостоят?
Еси изначально всё далаить в юникоде никаких проблем не будет
Да вот именно, что в самом начале и не знаешь что тебя ждёт. По-большому счету надо бы написать разработчикам ВП, чтобы вписали эту строку. Тогда не должно возникать проблем при начальной инсталяции.
Чуть позже напишу сам.
Супер! Только что по этому руководству один из блогов поднимал. Полет нормальный.
Только не понял, зачем последние манипуляции с wp-db.php
[quote post="557"]Только не понял, зачем последние манипуляции с wp-db.php[/quote]
Чтобы скрипт конектился к базе правильно — в utf. Серверная часть mysql работает в utf, а клиентская (wordpress) в latin1. Отсюда вся фигня и идёт. Я вообще не понимаю, почему перцы из WP до сих пор не добавили эту строку — многим бы юзерам стало легче от этого.
Может потому что разработчики пишут «паанглиски»? :-) Им вообще пох какая кодировка, пусть хоть ее вообще не будет :-)
И всё-таки есть вопросы :-) :
1. Делаю дамп, как описано здесь — www.linux.by/wiki/index.p...HP_MySQL_charset .В файле дампа базы нет никаких указаний на COLLATION — только DEFAULT CHARSET=cp1251
2. Дамп открываю в Notepad++ — естествено, в таблице wp_posts — «закорючки». Если установить Нотепаду Форматы «Кодировать в UTF8» или «Кодировать в UTF8 (без BOM)» (кстати, какой из них правильно использовать?) — то всё читается.
Что сделать, чтобы на новом хостинге все было в UTF8?
DEFAULT CHARSET=cp1251 нужно заменить DEFAULT CHARSET=utf-8
Редактору нужно установить опцию «Кодировать в UTF8 (без BOM)»
BOM — это невидимая utf-метка в начале файла, из-за неё могут возникнуть проблемы при экспорте файла.
Затем через PHPMYADMIN:
Установить MySQL connection collation — utf_unicode_ci
Потом саму базу тоже установить в utf8_general_ci
Затем исправьте файл wp-db.php, как я описал в посте (добавить set names).
И уже после этого, экспортнуть свою базу через пхпмайадмин (а лучше подключиться и сделать это через NetCat).
ага — спасибо, почти справился. Почему-то получилось, что база в utf8_unicode_ci, а таблицы — в utf8_general_ci (таблицы создавались при импорте). Но отображается по-русски нормально — надо ли исправлять collation?
Не, у меня именно в этой связке и заработал русский в базе. Буквально только что в группах гугла ru-wordpress, я там пару скриншотов выложил.
Переносил свой сайт. Пришлось немного повозиться. Очень помогла директива --default-character-set=cp1251 у Mysqldump :-)))
Всем советую =)
Ar2r, вот бы вам отрезать кое что, чтобы вы гены свои в следующие поколения не передавали...
За что? У меня в базе cp1251 хранилась инфа в utf8 кодировке =)
Да, именно за это.
А вообще за то, что cp1251 присутствует в вашем приложении в принципе
Супер! Что только не делал, чтоб убрать эти крякозябрики. Сколько возился в wp-db. А всего-то хватило поставить файл .htaccess.
Спасибо Slaff!!!
Кстати, за прошедший год, в новых редакциях WP баг исправлен (строка 86 файла из родного дистрибудтива):
if ( !empty($this->charset) && version_compare(mysql_get_server_info(), '4.1.0', '>=') ) $this->query("SET NAMES '$this->charset'");Спасибо большое, фишка прокатила! Теперь с кодировкой все чики-пуки!