Support > cpg1.4.x FAQ (Russian)

Русские имена файлов при загрузке в галер

<< < (2/11) > >>

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