Проблемы с кодировками в Gallery2 (пример Joomla)

Многие, наверное, сталкивались с проблемами кодировок при использовании 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

“components/com_gallery2/classes/core.class”
в 2.2.4 я такого файла вообще не нашел :(

Добрый день ! оч помогла статья !)) действительно все заработало. однако перестал работать плагин к комюнитибилдеру который показывает в дополнительной вкладке фотографии пользователя из альбома.
Он выдает секюрити алерт в крякозябрах . Подозреваю что проблема в кодировке, однако мозга не хватает решит эту проблему трансляцией описанного выше метода ! если у окго есть время + желаение могу отблагодарить вебманями за помощь! вот ссылка на плагин
http://joomlaforum.ru/index.php/topic,20636.0.html (прикрепленк первому посту — plug_g2bridge.zip )

спасибо !

Да, хотелось бы пояснений с нахождении файлов core.class.

А что делать если система e107 ???