Support > cpg1.4.x FAQ (Russian)
Русские имена файлов при загрузке в галер
Alex Revo:
Давай проверим догадки Makca.
Посмотри значения в блока [iconv] в своем php.ini (www.your_gallery.ru/phpinfo.php)
Если там прописана какая-то кодировка, то ее можно переопределить через .htaccess, для этого нужно добавить в этот файл примерно такие строки
php_value iconv.input_encoding = windows-1251
php_value iconv.internal_encoding = windows-1251
php_value iconv.output_encoding = windows-1251
Это тоже моя догадка, Makc может объяснить лучше.
Makc666:
Кстати, я тут перечитал первое сообщение.
Ссылка получается такая у тебя:
...../userpics/10025/%D0%98%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5_268.jpg
Изображение то отображается?
Просто по другому эта ссылка выглядить не может.
Русских букв там быть не может в ссылке.
Можно заменить русские буквы на подчеркивание при заливке файлов:
Конфиг -> Дополнительные настройки файлов и миниатюр
Символы, запрещенные в именах файлов
Изменить значение по умолчанию:
$/\\:*?"'<>|` &
на вот такое значение:
$/\\:*?"'<>|` &ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮЁйцукенгшщзхъфывапролджэячсмитьбюё
unxed:
По-моему, весьма изящьное решение этой проблемы - взять файл include/functions.inc.php, и заменить в нем
--- Code: ---function path2url($path)
{
return str_replace("%2F","/",rawurlencode($path));
}
--- End code ---
на
--- Code: ---function path2url($path)
{
return str_replace("%2F","/",rawurlencode(iconv("windows-1251","utf-8",$path)));
}
--- End code ---
Естественно, это требует наличия php с поддержкой iconv. Впрочем, вместо iconv можно использовать любую функцию, перекодирующую из 1251 в utf-8. Разумеется, вместо windows-1251 можно вписать что угодно, если имена файлов в иной кодировке.
Проверено на Coppermine 1.4.12, Apache 2.2, PHP 5.1.6.
Andrey:
после замены в файле include/functions.inc.php на
--- Code: ---function path2url($path)
{
return str_replace("%2F","/",rawurlencode(iconv("windows-1251","utf-8",$path)));
}
--- End code ---
Стали отображаться фотки ранее загруженные с русским названием файла, и также успешно загружаются фотки с русским названием,
НО теперь файлы которые имеют русское название не возможно переименовать во что то другое, при такой попытке CPG говорит:
"Критическая ошибка
Исходный файл 'albums/userpics/10001/Голубые_холмы.jpg' отсутствует."
Но если заменить файл functions.inc.php на старый вариант с кодом:
--- Code: ---function path2url($path)
{
return str_replace("%2F","/",rawurlencode($path));
}
--- End code ---
То переименовать удается успешно, но возвращается старая проблема с отображением файлов на русском :(
Кто знает где можно ещё подшаманить чуток? Чтобы и то и другое работало?
Makc666:
Есть в файле:
editOnePic.php
вот такой кусок кода:
--- Code: --- // rename a file
if ($_POST['filename'] != $pic['filename'])
{
if($CONFIG['thumb_use']=='ht' && $pic['pheight'] > $CONFIG['picture_width']) {
$condition = true;
} elseif ($CONFIG['thumb_use']=='wd' && $pic['pwidth'] > $CONFIG['picture_width']){
$condition = true;
} elseif ($CONFIG['thumb_use']=='any' && max($pic['pwidth'], $pic['pheight']) > $CONFIG['picture_width']){
$condition = true;
} else {
$condition = false;
}
if ($CONFIG['make_intermediate'] && $condition ) {
$prefices = array('fullsize', 'normal', 'thumb');
} else {
$prefices = array('fullsize', 'thumb');
}
if (!is_image($pic['filename'])){
$prefices = array('fullsize');
}
foreach ($prefices as $prefix)
{
$oldname = urldecode(get_pic_url($pic, $prefix));
$filename = replace_forbidden($_POST['filename']);
$newname = str_replace($pic['filename'], $filename, $oldname);
$old_mime = cpg_get_type($oldname);
$new_mime = cpg_get_type($newname);
if (($old_mime['mime'] != $new_mime['mime']) && isset($new_mime['mime']))
cpg_die(CRITICAL_ERROR, sprintf($lang_editpics_php['mime_conv'], $old_mime['mime'], $new_mime['mime']), __FILE__, __LINE__);
if (!is_known_filetype($newname))
cpg_die(CRITICAL_ERROR, $lang_editpics_php['forb_ext'], __FILE__, __LINE__);
if (file_exists($newname))
cpg_die(CRITICAL_ERROR, sprintf($lang_editpics_php['file_exists'], $newname), __FILE__, __LINE__);
if (!file_exists($oldname))
cpg_die(CRITICAL_ERROR, sprintf($lang_editpics_php['src_file_missing'], $oldname), __FILE__, __LINE__);
if (rename($oldname, $newname))
{
cpg_db_query("UPDATE {$CONFIG['TABLE_PICTURES']} SET filename = '$filename' WHERE pid = '$pid' LIMIT 1");
} else cpg_die(CRITICAL_ERROR, sprintf($lang_editpics_php['rename_failed'], $oldname, $newname), __FILE__, __LINE__);
}
}
--- End code ---
Может быть игра вот с этими переменными:
--- Code: --- $oldname = urldecode(get_pic_url($pic, $prefix));
$filename = replace_forbidden($_POST['filename']);
$newname = str_replace($pic['filename'], $filename, $oldname);
--- End code ---
на примере:
--- Code: ---function path2url($path)
{
return str_replace("%2F","/",rawurlencode(iconv("windows-1251","utf-8",$path)));
}
--- End code ---
вам и поможет.
P.S. У меня на сайте все работает с руссими буквами на ура без всяких изменений где-либо...
Navigation
[0] Message Index
[#] Next page
[*] Previous page
Go to full version