Advanced search  

News:

CPG Release 1.6.26
Correct PHP8.2 issues with user and language managers.
Additional fixes for PHP 8.2
Correct PHP8 error with SMF 2.0 bridge.
Correct IPTC supplimental category parsing.
Download and info HERE

Pages: [1] 2 3   Go Down

Author Topic: Русские имена файлов при загрузке в галер  (Read 75410 times)

0 Members and 1 Guest are viewing this topic.

Kowex

  • Coppermine newbie
  • Offline Offline
  • Posts: 13

Возможно это как то решить?
Ошибки при создании миниатюр..
ссылка вот такого типа получается ...../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
А было Изображение_268.jpg
« Last Edit: November 19, 2008, 01:44:05 pm by Makc666 »
Logged

Alex Revo

  • Moderator
  • Coppermine addict
  • ****
  • Offline Offline
  • Posts: 637
  • Инженер человеческих душ
    • Фото Ростова-на-Дону
Re: Русские имена файлов, бяда..
« Reply #1 on: May 02, 2007, 11:55:47 pm »

Странно... у меня такого не происходит...
Какая версия галереи?
« Last Edit: March 25, 2009, 09:35:01 pm by Makc666 »
Logged

Makc666

  • Moderator
  • Coppermine addict
  • ****
  • Offline Offline
  • Gender: Male
  • Posts: 1614
  • Русский (ISO-8859-1) - Russian - Русский (Windows)
    • Makc's home page
Re: Русские имена файлов, бяда..
« Reply #2 on: May 03, 2007, 03:07:00 pm »

Всего скорее это зависит от того, установлены ли:
php5-iconv или libiconv (не помню точно что важнее). 

и от настроек блока в файле php.ini:

[iconv]
;iconv.input_encoding = ISO-8859-1
;iconv.internal_encoding = ISO-8859-1
;iconv.output_encoding = ISO-8859-1

Но это лишь мои догадки :)
« Last Edit: March 25, 2009, 09:34:51 pm by Makc666 »
Logged

Kowex

  • Coppermine newbie
  • Offline Offline
  • Posts: 13
Re: Русские имена файлов, бяда..
« Reply #3 on: May 06, 2007, 07:14:25 pm »

версия 1.4.10


php.ini

;extension=php_iconv.dll
Logged

Kowex

  • Coppermine newbie
  • Offline Offline
  • Posts: 13
Re: Русские имена файлов, бяда..
« Reply #4 on: May 27, 2007, 09:39:49 pm »

Неужели никто не сталкивался с этим?
Как решить проблему, куда смотреть то хоть?

PHP 5
IIS 6
Logged

Alex Revo

  • Moderator
  • Coppermine addict
  • ****
  • Offline Offline
  • Posts: 637
  • Инженер человеческих душ
    • Фото Ростова-на-Дону
Re: Русские имена файлов, бяда..
« Reply #5 on: May 27, 2007, 09:52:40 pm »

Давай проверим догадки 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 может объяснить лучше.
« Last Edit: March 25, 2009, 09:34:40 pm by Makc666 »
Logged

Makc666

  • Moderator
  • Coppermine addict
  • ****
  • Offline Offline
  • Gender: Male
  • Posts: 1614
  • Русский (ISO-8859-1) - Russian - Русский (Windows)
    • Makc's home page
Re: Русские имена файлов, бяда..
« Reply #6 on: June 26, 2007, 12:18:36 pm »

Кстати, я тут перечитал первое сообщение.
Ссылка получается такая у тебя:
...../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

Изображение то отображается?

Просто по другому эта ссылка выглядить не может.
Русских букв там быть не может в ссылке.

Можно заменить русские буквы на подчеркивание при заливке файлов:

Конфиг -> Дополнительные настройки файлов и миниатюр
Символы, запрещенные в именах файлов

Изменить значение по умолчанию:
$/\\:*?"'<>|` &
на вот такое значение:
$/\\:*?"'<>|` &ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮЁйцукенгшщзхъфывапролджэячсмитьбюё
« Last Edit: March 25, 2009, 09:34:30 pm by Makc666 »
Logged

unxed

  • Coppermine newbie
  • Offline Offline
  • Posts: 1
Re: Русские имена файлов, бяда..
« Reply #7 on: August 06, 2007, 01:30:03 am »


По-моему, весьма изящьное решение этой проблемы - взять файл include/functions.inc.php, и заменить в нем

Code: [Select]
function path2url($path)
{
        return str_replace("%2F","/",rawurlencode($path));
}

на

Code: [Select]
function path2url($path)
{
        return str_replace("%2F","/",rawurlencode(iconv("windows-1251","utf-8",$path)));
}

Естественно, это требует наличия php с поддержкой iconv. Впрочем, вместо iconv можно использовать любую функцию, перекодирующую из 1251 в utf-8. Разумеется, вместо windows-1251 можно вписать что угодно, если имена файлов в иной кодировке.

Проверено на Coppermine 1.4.12, Apache 2.2, PHP 5.1.6.
Logged

Andrey

  • Coppermine newbie
  • Offline Offline
  • Posts: 16

после замены в файле include/functions.inc.php на
Code: [Select]
function path2url($path)
{
        return str_replace("%2F","/",rawurlencode(iconv("windows-1251","utf-8",$path)));
}
Стали отображаться фотки ранее загруженные с русским названием файла, и также успешно загружаются фотки с русским названием,
НО теперь файлы которые имеют русское название не возможно переименовать во что то другое, при такой попытке CPG говорит:
"Критическая ошибка
Исходный файл 'albums/userpics/10001/Голубые_холмы.jpg' отсутствует."
Но если заменить файл functions.inc.php на старый вариант с кодом:
Code: [Select]
function path2url($path)
{
        return str_replace("%2F","/",rawurlencode($path));
}
То переименовать удается успешно, но возвращается старая проблема с отображением файлов на русском :(
Кто знает где можно ещё подшаманить чуток? Чтобы и то и другое работало?
« Last Edit: March 25, 2009, 09:34:17 pm by Makc666 »
Logged

Makc666

  • Moderator
  • Coppermine addict
  • ****
  • Offline Offline
  • Gender: Male
  • Posts: 1614
  • Русский (ISO-8859-1) - Russian - Русский (Windows)
    • Makc's home page

Есть в файле:
editOnePic.php

вот такой кусок кода:
Code: [Select]
    // 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__);
        }
    }

Может быть игра вот с этими переменными:
Code: [Select]
            $oldname = urldecode(get_pic_url($pic, $prefix));
            $filename = replace_forbidden($_POST['filename']);
            $newname = str_replace($pic['filename'], $filename, $oldname);
на примере:
Code: [Select]
function path2url($path)
{
        return str_replace("%2F","/",rawurlencode(iconv("windows-1251","utf-8",$path)));
}
вам и поможет.

P.S. У меня на сайте все работает с руссими буквами на ура без всяких изменений где-либо...
« Last Edit: March 25, 2009, 09:34:02 pm by Makc666 »
Logged

Andrey

  • Coppermine newbie
  • Offline Offline
  • Posts: 16

да у меня тоже всё было нормально пока не обновился с 1.4.9 до 1.4.13 :(
спасибо посмотрю может что получится..
« Last Edit: March 25, 2009, 09:33:53 pm by Makc666 »
Logged

BrB

  • Coppermine newbie
  • Offline Offline
  • Gender: Male
  • Posts: 7

Один из вариантов решения:

Открываем:
Code: [Select]
include/functions.inc.php
Находим строку:
Code: [Select]
$str = str_replace(array('&amp;', '&quot;', '&lt;', '&gt;'), array('&', '"', '<', '>'), $str);;
Заменяем на:
Code: [Select]
$str = str_replace(array('&amp;', '&quot;', '&lt;', '&gt;', 'а', 'б', 'в', 'г', 'д', 'е', 'ё', 'ж', 'з', 'и', 'й', 'к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф', 'х', 'ц', 'ч', 'ш', 'щ', 'ь', 'ъ', 'ы', 'э', 'ю', 'я', 'А', 'Б', 'В', 'Г', 'Д', 'Е', 'Ё', 'Ж', 'З', 'И', 'Й', 'К', 'Л', 'М', 'Н', 'О', 'П', 'Р', 'С', 'Т', 'У', 'Ф', 'Х', 'Ц', 'Ч', 'Ш', 'Щ', 'Ь', 'Ъ', 'Ы', 'Э', 'Ю', 'Я'), array('&', '"', '<', '>', 'a', 'b', 'v', 'g', 'd', 'e', 'jo', 'zh', 'z', 'i', 'i', 'k', 'l', 'm', 'n', 'o', 'p', 'r', 's', 't', 'u', 'f', 'x', 'c', 'ch', 'sh', 'sch', 'j', 'j', 'y', 'e', 'y', 'ja', 'A', 'B', 'V', 'G', 'D', 'E', 'Jo', 'Zh', 'Z', 'I', 'I', 'K', 'L', 'M', 'N', 'O', 'P', 'R', 'S', 'T', 'U', 'F', 'X', 'C', 'Ch', 'Sh', 'Sch', 'J', 'J', 'Y', 'E', 'Y', 'Ja'), $str);;
Logged

Makc666

  • Moderator
  • Coppermine addict
  • ****
  • Offline Offline
  • Gender: Male
  • Posts: 1614
  • Русский (ISO-8859-1) - Russian - Русский (Windows)
    • Makc's home page

Один из вариантов решения:
Хороший вариант, но, я думаю, что лучше было бы сделать вот так:

Открываем:
Code: [Select]
include/functions.inc.php
Находим строку:
Code: [Select]
$str = str_replace(array('&amp;', '&quot;', '&lt;', '&gt;'), array('&', '"', '<', '>'), $str);
Под ней вставляем строку: 
Code: [Select]
$str = str_replace(array('а', 'б', 'в', 'г', 'д', 'е', 'ё', 'ж', 'з', 'и', 'й', 'к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф', 'х', 'ц', 'ч', 'ш', 'щ', 'ь', 'ъ', 'ы', 'э', 'ю', 'я', 'А', 'Б', 'В', 'Г', 'Д', 'Е', 'Ё', 'Ж', 'З', 'И', 'Й', 'К', 'Л', 'М', 'Н', 'О', 'П', 'Р', 'С', 'Т', 'У', 'Ф', 'Х', 'Ц', 'Ч', 'Ш', 'Щ', 'Ь', 'Ъ', 'Ы', 'Э', 'Ю', 'Я'), array('a', 'b', 'v', 'g', 'd', 'e', 'jo', 'zh', 'z', 'i', 'i', 'k', 'l', 'm', 'n', 'o', 'p', 'r', 's', 't', 'u', 'f', 'x', 'c', 'ch', 'sh', 'sch', 'j', 'j', 'y', 'e', 'y', 'ja', 'A', 'B', 'V', 'G', 'D', 'E', 'Jo', 'Zh', 'Z', 'I', 'I', 'K', 'L', 'M', 'N', 'O', 'P', 'R', 'S', 'T', 'U', 'F', 'X', 'C', 'Ch', 'Sh', 'Sch', 'J', 'J', 'Y', 'E', 'Y', 'Ja'), $str);
P.S.
Т.к. в строке:
Code: [Select]
$str = str_replace(array('&amp;', '&quot;', '&lt;', '&gt;'), array('&', '"', '<', '>'), $str);;явная опечатка в коде с дублированием ;; в конце строки, то лучше искать данную строку с одной ;
« Last Edit: March 25, 2009, 09:33:39 pm by Makc666 »
Logged

BrB

  • Coppermine newbie
  • Offline Offline
  • Gender: Male
  • Posts: 7

Эту опечатку допустили сами разработчики  :(  (версия 1.4.16)
« Last Edit: March 25, 2009, 09:33:30 pm by Makc666 »
Logged

Makc666

  • Moderator
  • Coppermine addict
  • ****
  • Offline Offline
  • Gender: Male
  • Posts: 1614
  • Русский (ISO-8859-1) - Russian - Русский (Windows)
    • Makc's home page

Эту опечатку допустили сами разработчики  :(  (версия 1.4.16)
Это точно :)
Я им об этом сразу написал, как увидел:
http://forum.coppermine-gallery.net/index.php/topic,51899.html
« Last Edit: March 25, 2009, 09:35:38 pm by Makc666 »
Logged

BrB

  • Coppermine newbie
  • Offline Offline
  • Gender: Male
  • Posts: 7

Makc666 думаю что ваш вариант лучше. У себя так и сделал.
« Last Edit: March 25, 2009, 09:35:28 pm by Makc666 »
Logged

BrB

  • Coppermine newbie
  • Offline Offline
  • Gender: Male
  • Posts: 7

Думаю, что еще лучше будет если сторока будет такая,
Code: [Select]
$str = str_replace(array('а', 'б', 'в', 'г', 'д', 'е', 'ё', 'ж', 'з', 'и', 'й', 'к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф', 'х', 'ц', 'ч', 'ш', 'щ', 'ь', 'ъ', 'ы', 'э', 'ю', 'я', 'А', 'Б', 'В', 'Г', 'Д', 'Е', 'Ё', 'Ж', 'З', 'И', 'Й', 'К', 'Л', 'М', 'Н', 'О', 'П', 'Р', 'С', 'Т', 'У', 'Ф', 'Х', 'Ц', 'Ч', 'Ш', 'Щ', 'Ь', 'Ъ', 'Ы', 'Э', 'Ю', 'Я'), array('a', 'b', 'v', 'g', 'd', 'e', 'jo', 'zh', 'z', 'i', 'i', 'k', 'l', 'm', 'n', 'o', 'p', 'r', 's', 't', 'u', 'f', 'x', 'c', 'ch', 'sh', 'sch', 'j', 'j', 'y', 'e', 'y', 'ja', 'a', 'b', 'v', 'g', 'd', 'e', 'jo', 'zh', 'z', 'i', 'i', 'k', 'l', 'm', 'n', 'o', 'p', 'r', 's', 't', 'u', 'f', 'x', 'c', 'ch', 'sh', 'sch', 'j', 'j', 'y', 'e', 'y', 'ja'), $str);
т.к. приведем все к одному регистру
« Last Edit: March 25, 2009, 09:35:19 pm by Makc666 »
Logged

Makc666

  • Moderator
  • Coppermine addict
  • ****
  • Offline Offline
  • Gender: Male
  • Posts: 1614
  • Русский (ISO-8859-1) - Russian - Русский (Windows)
    • Makc's home page

Думаю, что еще лучше будет если сторока будет такая,
Code: [Select]
$str = str_replace(array('а', 'б', 'в', 'г', 'д', 'е', 'ё', 'ж', 'з', 'и', 'й', 'к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф', 'х', 'ц', 'ч', 'ш', 'щ', 'ь', 'ъ', 'ы', 'э', 'ю', 'я', 'А', 'Б', 'В', 'Г', 'Д', 'Е', 'Ё', 'Ж', 'З', 'И', 'Й', 'К', 'Л', 'М', 'Н', 'О', 'П', 'Р', 'С', 'Т', 'У', 'Ф', 'Х', 'Ц', 'Ч', 'Ш', 'Щ', 'Ь', 'Ъ', 'Ы', 'Э', 'Ю', 'Я'), array('a', 'b', 'v', 'g', 'd', 'e', 'jo', 'zh', 'z', 'i', 'i', 'k', 'l', 'm', 'n', 'o', 'p', 'r', 's', 't', 'u', 'f', 'x', 'c', 'ch', 'sh', 'sch', 'j', 'j', 'y', 'e', 'y', 'ja', 'a', 'b', 'v', 'g', 'd', 'e', 'jo', 'zh', 'z', 'i', 'i', 'k', 'l', 'm', 'n', 'o', 'p', 'r', 's', 't', 'u', 'f', 'x', 'c', 'ch', 'sh', 'sch', 'j', 'j', 'y', 'e', 'y', 'ja'), $str);
т.к. приведем все к одному регистру
Кстати да! Очень хорошое предложение!!!
Подобный вариант будет ещё лучше.
Т.к. UNIX системы чувствительны к регистру букв.
Единственное что, для удобства редактирования, подобные строчки лучше разбивать на две строки, к примеру...

Переименование только в маленькие буквы:
Code: [Select]
$str = str_replace(array('а', 'б', 'в', 'г', 'д', 'е', 'ё', 'ж', 'з', 'и', 'й', 'к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф', 'х', 'ц', 'ч', 'ш', 'щ', 'ь', 'ъ', 'ы', 'э', 'ю', 'я'), array('a', 'b', 'v', 'g', 'd', 'e', 'jo', 'zh', 'z', 'i', 'i', 'k', 'l', 'm', 'n', 'o', 'p', 'r', 's', 't', 'u', 'f', 'x', 'c', 'ch', 'sh', 'sch', 'j', 'j', 'y', 'e', 'y', 'ja'), $str);
$str = str_replace(array('А', 'Б', 'В', 'Г', 'Д', 'Е', 'Ё', 'Ж', 'З', 'И', 'Й', 'К', 'Л', 'М', 'Н', 'О', 'П', 'Р', 'С', 'Т', 'У', 'Ф', 'Х', 'Ц', 'Ч', 'Ш', 'Щ', 'Ь', 'Ъ', 'Ы', 'Э', 'Ю', 'Я'), array('a', 'b', 'v', 'g', 'd', 'e', 'jo', 'zh', 'z', 'i', 'i', 'k', 'l', 'm', 'n', 'o', 'p', 'r', 's', 't', 'u', 'f', 'x', 'c', 'ch', 'sh', 'sch', 'j', 'j', 'y', 'e', 'y', 'ja'), $str);

Переименование в маленькие и большие:
Code: [Select]
$str = str_replace(array('а', 'б', 'в', 'г', 'д', 'е', 'ё', 'ж', 'з', 'и', 'й', 'к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф', 'х', 'ц', 'ч', 'ш', 'щ', 'ь', 'ъ', 'ы', 'э', 'ю', 'я'), array('a', 'b', 'v', 'g', 'd', 'e', 'jo', 'zh', 'z', 'i', 'i', 'k', 'l', 'm', 'n', 'o', 'p', 'r', 's', 't', 'u', 'f', 'x', 'c', 'ch', 'sh', 'sch', 'j', 'j', 'y', 'e', 'y', 'ja'), $str);
$str = str_replace(array('А', 'Б', 'В', 'Г', 'Д', 'Е', 'Ё', 'Ж', 'З', 'И', 'Й', 'К', 'Л', 'М', 'Н', 'О', 'П', 'Р', 'С', 'Т', 'У', 'Ф', 'Х', 'Ц', 'Ч', 'Ш', 'Щ', 'Ь', 'Ъ', 'Ы', 'Э', 'Ю', 'Я'), array('A', 'B', 'V', 'G', 'D', 'E', 'Jo', 'Zh', 'Z', 'I', 'I', 'K', 'L', 'M', 'N', 'O', 'P', 'R', 'S', 'T', 'U', 'F', 'X', 'C', 'Ch', 'Sh', 'Sch', 'J', 'J', 'Y', 'E', 'Y', 'Ja'), $str);

Хотя это я уже придераюсь :)

Важное дополнение: При копировании из поста куска кода в файл, не забудьте при сохранении файла указать его кодировку, т.е. UTF-8 при использовании стандартной версии галереи.
« Last Edit: July 12, 2008, 03:49:50 pm by Alex Revo »
Logged

D.Kalessky

  • Coppermine regular visitor
  • **
  • Offline Offline
  • Gender: Male
  • Posts: 51

у меня возникла проблемка, связанная и с этой темой, и с темой "bbcode превью с увеличением по клику для вставки фото на форумы" http://forum.coppermine-gallery.net/index.php/topic,51295.0.html.
К какой теме моя проблемка больше относится пока не знаю, но чтоб не постить в двух темах, напишу только тут.
 
Благодаря предыдущему сообщению от Makc666 я успешно решил проблему с русскими названиями файлов. Транслитерация работает замечательно. Однако в результатах работы плагина bbcode_1_21 возникает проблема отображения символа тильда ~, которая отображается как набор символов %7E.

Аналогично решению с русскими буквами попытался решить проблему и с тильдой, но не получилось. Порекомендуйте плиз вариант корректного ее отображения. Заранее спасибо.
« Last Edit: March 25, 2009, 09:40:10 pm by Makc666 »
Logged

D.Kalessky

  • Coppermine regular visitor
  • **
  • Offline Offline
  • Gender: Male
  • Posts: 51

и еще одно маленькое уточнение к написанному мной выше: параллельно с этой задачей порекомендуйте решение проблемы с некорректным отображением ссылок, если в их адресе находятся спецсимволы. так, на моем форуме запрещены символы % и ~, которые иногда встречаются. хотелось бы автоматом их заменить на процессе загрузки файлов.
« Last Edit: March 25, 2009, 09:40:02 pm by Makc666 »
Logged
Pages: [1] 2 3   Go Up
 

Page created in 0.048 seconds with 20 queries.