Многие, наверное, сталкивались с проблемами кодировок при использовании Gallery2.
Так как Gallery2 имеет кодировку UTF-8, а сторонние компоненты могут использовать
другую кодировку, то в браузере могут появиться нечитаемые символы или данные форм
не будут сохраняться в базу данных.
Как решать проблему? Общий принцип: проводить конвертацию из вами используемой
кодировки в UTF-8 при передаче данных на сервер и, наоборот, при выводе данных с
сервера на страницу.
Вот конкретный пример решения такой проблемы.
На сервере стоит Joomla(версия 1.0.12, используется кодировка CP1251). Установлена
Gallery2(версия 2.2.3,кодировка UTF-8).
После установки моста интеграции Gallery2 (версия Gallery 2 Bridge 2.0.14 Beta) в Joomla
возникли следующие проблемы.
1)При отключении опции перекодировки (админка джумлы/компоненты/Gallery2/Settings/utf8 -> no)
содержимое русского текста в джумле отображалось: ???? ??? ???(кодировка ISO-8859-1).
2)При включении опции русский текст в галерее был в кодировке utf8, а сайт в cp1251.
Соответственно, одновременно ни то ни другое нормально не отображалось: либо галерея
нормально работала, а остальное содержимое сайта было в закорючках, либо наоборот …
3)В админке русские названия групп отображаются закорючками в кодировке UTF-8.
Для начала, решим проблему с корректным выводом кодировки на html-страницу. Для этого
находим файл “components/com_gallery2/classes/core.class” и редактируем в нем функцию
function decoded($text, $bbCode = false, $stripTags = false)
Заменяем внутри этой функции
$text = utf8_decode($text);
На
$text = iconv("UTF-8", "CP1251//IGNORE", $text);
Теперь все нормально выводится в окне сайта. Проблема с админкой решается следyющим образом.
В файле “administrator/components/com_gallery2/admin.gallery2.php”
после строки 255 вставляем:
$name = core::decoded($name);
Должно получиться следующее:
foreach($groups as $gid => $name){
$value = (isset($userGroups[$gid])) ? 1 : 0;
//--------added-------//
$name = core::decoded($name);
//----------------------//
$list[$name] = mosHTML::yesnoRadioList('gids['.$gid.']', 'class="inputbox" size="1"', $value);
}
Итак, вывод из базы данных галереи в сайт перекодирован.
Теперь нужно провести декодирование данных посылаемых из сайта в базу данных (из CP1251
в UTF-8). В противном случае изменение или сохранение данных может попасть в базу в неправильной
кодировке и потом вообще не отображаться.
1) Посылка данных из админки. Для этого находим файл “components/com_gallery2/classes/core.class”
и редактируем в нем функцию
function encoded($text)
Заменяем
$text = utf8_encode($text);
На
$text = iconv("CP1251", "UTF-8//IGNORE", $text);
2)Перекодирование данных форм.
Необходимо вставить в файл “gallery2/main.php” сразу после строки номер 220, а именно:
$form = GalleryUtilities::getFormVariables('form');
следующую строку перекодировки
$form = GalleryUtilities::encode_from_cp1251_to_utf8($form);
Также необходимо создать функцию encode_from_cp1251_to_utf8 в файле “gallery2/modules/core/classes/GalleryUtilities.class”
function encode_from_cp1251_to_utf8($oldValues) {
$array = array();
foreach ($oldValues as $key => $value) {
if (is_array($value)) {
$array[$key] = array();
$array[$key] = GalleryUtilities::encode_from_cp1251_to_utf8($value);
} else {
//changed by neem to decode from cp1251 to utf-8 to put to database
//$array[$key] = $value;
$array[$key] = iconv("CP1251", "UTF-8//IGNORE", $value);
}
}
return $array;
}
Вот, в принципе, все, что нужно сделать, чтобы галерея стала нормально работать с кодировкой cp1251
через мост в Joomla.
Аналогичные шаги можно выполнить и при настройке кодировки в других мостах. Нужно лишь локализовать
место, где происходит вывод информации на страницу и добавить там перекодировку из UTF8 в нужную.
То же самое нужно сделать, для вывода данных со страницы в базу данных.
Надеюсь, кому-то поможет!

А у меня такая проблема:
при загрузке файлов картинок с записанными данными IPTC в Photoshop 7 (В название, описание, ключевые слова,…)они понимаются галереей в неправильной кодировке. я заметил, что это происходит только в случае устанвленной галереи на UNIX-сервере
http://www.galleryua.com