Есть такой вебмейл интерфейс — Horde.
И в целом он совсем не плох, только вот есть проблема с русскими символами, русскими именами и вообще с русскими кодировками.
Например при добавлении контакта с русским именем в horde адрессную книгу, получаем ошибку:
DB Error: unknown error
Здесь я опишу очень простой рецепт решения всех этих проблем
Заходим в браузере в веб-интерфейс Horde, смотрим в настройках страницы кодировку, которую выбрал браузер для этой страницы, что бы понять, в какой кодировке у нас отдает страницы Horde.
У меня, например, оказалась кодировка utf-8 и это пришлось очень кстати.
Дальше все очень просто:
Идем в терминал, выполняем:
mysqldump --add-drop-table horde > horde.sql
где horde это имя БД используемой horde
Открываем файл horde.sql, лично я пользуюсь nano
nano horde.sql
ctrl+w
ctrl+r
Это что бы включить режим замены.
Далее вбиваем что менять:
DEFAULT CHARSET=latin1;
На что менять:
DEFAULT CHARSET=utf8;
Жмем Enter, жмем А (заменить все), и сохраняем файл:
ctrl+o
ctrl+x
Сохранив файл и закрыв nano таким образом, остается последний штрих:
mysql horde < horde.sql
Все - наслаждаемся поддержкой русских текстов в Horde :)
Добавлено через два часа:
Наслаждаемся, но не долго :D Поскольку начинаем замечать, что некоторые символы, например "И" (русская буква И именно в этом регистре) не проходят в БД и это приводит к ошибкам.
Что бы устранить это досадное упущение, открываем скрипт
horde/pear/php/DB/mysql.php
Находим там такой кусок кода:
$ini = ini_get('track_errors'); $php_errormsg = ''; if ($ini) { $this->connection = @call_user_func_array($connect_function, $params); } else { @ini_set('track_errors', 1); $this->connection = @call_user_func_array($connect_function, $params); @ini_set('track_errors', $ini); } if (!$this->connection) { if (($err = @mysql_error()) != '') { return $this->raiseError(DB_ERROR_CONNECT_FAILED, null, null, null, $err); } else { return $this->raiseError(DB_ERROR_CONNECT_FAILED, null, null, null, $php_errormsg); } } |
И добавляем сразу после этого места строку:
mysql_query('SET NAMES utf8');
В итоге это выглядит так:
$ini = ini_get('track_errors'); $php_errormsg = ''; if ($ini) { $this->connection = @call_user_func_array($connect_function, $params); } else { @ini_set('track_errors', 1); $this->connection = @call_user_func_array($connect_function, $params); @ini_set('track_errors', $ini); } if (!$this->connection) { if (($err = @mysql_error()) != '') { return $this->raiseError(DB_ERROR_CONNECT_FAILED, null, null, null, $err); } else { return $this->raiseError(DB_ERROR_CONNECT_FAILED, null, null, null, $php_errormsg); } } mysql_query('SET NAMES utf8'); if ($dsn['database']) { if (!@mysql_select_db($dsn['database'], $this->connection)) { return $this->mysqlRaiseError(); |
Проверяем - работает :)