Drupal, Denwer, phpMyAdmin и кодировки cp1251, utf8.

Если Вы задумаете обмениваться базами данных между своими Друпал (Drupal) сайтами, например сайтом на Вашем компьютере и сайтом в сети Интернет, то может возникнуть проблема с отображением текста Ваших страничек. Вы можете получить вместо текста крякозябры.

Это связано с тем, что Друпал работает с кодировкой utf8, а Денвер работает с кодировкой cp1251. По незнанию, я устанавливал Друпал по умолчанию, то есть установил Денвер и тут же установил Друпал. У меня работало вроде всё нормально, но потом было замечено что не работает поиск по русским буквам. Кстати это можно использовать как проверку. Попробуйте поискать русское слово на сайте и если результата нет, а вы знаете что такое слово точно есть, то скорее всего проблема с кодировкой.

Поиски по Интернету дали только то, что Друпал нормально работает с utf8. Потом появились проблемы при использовании импорта/экспорта базы данных. В интернет базы MySQL работают в основном с кодировкой utf8. В другую кодировку текст преобразовывается сервером при передачи текста в браузер.

Денвер, по умолчанию, преобразовывает текст в кодировку cp1251. При экспорте базы MySQL данные сохраняются в cp1251 и при импорте в другую базу они также идут в кодировке cp1251, но приемная база считает что это utf8 и при выдаче в браузер происходит ещё одна перекодировка, ненужная, и получается непонятно что.

Что бы этого избежать, мною были внесены некоторые изменения в настройки базы MySQL и phpMyAdmin.

Кодовая таблица для базы данных MySQL определяется в файле my.cnf. Его можно открыть для редактирования из любого текстового редактора. Только надо сначала открыть редактор, а потом в редакторе открыть этот файл.

Если установка Денвера происходила по умолчанию или по рекомендациям, то этот файл будет расположен в Z:\usr\local\mysql-5.1\my.cnf или аналогичном. Принадлежность к базе данных можно определить по имени папки mysql .

Делаем замены, устанавливающие кодовую таблицу utf8 вместо cp1251

Для этого ищем строки и меняем в них cp1251 на utf8

[client]
port                  = 3306
socket                = /tmp/mysql5.sock
default-character-set = utf8   # было cp1251
character-sets-dir    = /usr/local/mysql-5.1/share/charsets

#
# Параметры MySQL-сервера.
#
[mysqld]
# Кодировка баз данных по умолчанию.
default-character-set = utf8 # было cp1251
init-connect = "set names utf8" # было cp1251

Не забываем перезапустить сервер Денвера (Restart server). На момент написания этого материала у меня установлен базовый пакет Denwer-3. Если у Вас установлены другие версии, то возможно отличие, но принцип остаётся - надо ср1251 заменить на utf8 .

Так как в основном для импорта/экспорта используется phpMyAdmin, то нужно и там сделать некоторые изменения.

Справа на главной странице http://localhost/Tools/phpmyadmin/index.php выбираем Language -> Russian (ru-utf-8), Сопоставление соединения с MySQL -> utf8_general_ci должно быть: MySQL-кодировка: UTF-8 Unicode (utf8)

В самом низу страницы возможно возникнет сообщение:

Ваш конфигурационный файл содержит настройки (пользователь root без пароля), которые относятся к привилегированному пользователю MySQL (по умолчанию). Ваш MySQL сервер запущен с этими настройками по умолчанию, открытый для вторжений, поэтому Вам настоятельно рекомендуется устранить эту дыру в безопасности. The mbstring PHP extension was not found and you seem to be using multibyte charset. Without mbstring extension phpMyAdmin is unable to split strings correctly and it may result in unexpected results.

Сообщение на английском говорит о том, что для нормальной работы phpMyAdmin с кодировкой utf8 необходим модуль расширения mbstring для PHP. Данный модуль есть в расширении для PHP для Денвера, Это расширение нужно скачивать если только это сообщение на английском языке есть. Скачиваем это расширение и устанавливаем если Вы его ещё не установили.

Далее ищем файл Z:\usr\local\php\php.ini и в нем убираем ";" в начале строк

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Динамически загружаемые расширения ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Убираем ; (точку с запятой) перед двумя следующими строками

extension=php_gd2.dll -- графическая библиотека
extension=php_mbstring.dll -- работа с уникодом.

перезапускаем Денвер и проверяем обновлением страницы http://localhost/Tools/phpmyadmin/index.php

Если надпись The mbstring PHP extension was not found and you seem to be using multibyte charset. Without mbstring extension phpMyAdmin is unable to split strings correctly and it may result in unexpected results. изчезла, то проблемы решены и всё должно работать нормально.

Во всяком случае у меня все работает и поиск и импорт/экспорт.

 

Тематика:

Комментарии

В нынешнем варианте Денвера (Denwer3_Base_2008-01-13) докачивать расширение для php не надо.. extension=php_gd2.dll -- графическая библиотека - уже подключен остается подключить только модуль extension=php_mbstring.dll -- работа с уникодом (убрать;). Спасибо огромное за понятные описания по установке Drupal!!!!! (тока вот captcha для коммента невменяемая..не всегда разберешь, что имеется в виду...с пятой попытки)

Стоит 3 Денвер, докачал расширение php_mbstring.dll, раскомментировал, перегрузил сервер. Однако надпись не исчезла....

Проблема решена, дело в том что на 3 Денвер если ставить расширение которое в статье по ссылке, то php_mbstring.dll не скопируется. Его надо руками встаить в /local/php5/ext

Спасибки за месагу. Прочитал с удовольствием.