Проблемы с кодировками в 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 ???

Tim poses in front of the ice cream machine. Ice cream, drinks and French fries are free in this family park… (best viewed in Large) 29 july, 2009 Amusement park pass4sure NS0-153 Wunderland Kalkar is situated at the grounds of the nuclear reactor SNR-300. The reactor was built from 1972 until 1985 but was never used due to many protests. In 1991 the project pass4sure 646-046 was officially cancelled. Four years later the reactor was put up for auction and bought by the Dutch investor Hennie van der Most for only 2.5 million euros. The site is transformed pass4sure NS0-163 into an amusement park named Kernwasser Wunderland (Nuclearwater Wonderland). It includes a hotel with 400 beds. pass4sure 1z0-053 In 2005 it was renamed into Wunderland Kalkar.