Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Преобразование названия файла в юникод


Автор: supercelt 19.8.2009, 18:38
Код

$size_src = getimagesize($src);


Если название у файла русское, то вылезает ошибка 
Warning: getimagesize(http://testcms.com/cms_s01_upload_files/images/картинка.jpg) [function.getimagesize]: failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in Z:\home\testcms.com\www\cms_s01_libs\tiny_mce\plugins\filemanager\php\functions.php on line 91


Потом я название файла обрабатывал вот этой функцией:

Код

function str_rus( $str )
// преобразование русских букв в строке для вывода на картинку
{
$nstr=""; // итоговая строка
for( $i=0; $i<strlen( $str ) ;    $i++)
{
    $symbol=substr($str, $i, 1); // get symbol
    $ascii=ord( $symbol );    // get ascii code of this symbol
    if( $ascii < 128 )
    {    $nstr .= $symbol;        }
    elseif( $ascii > 191 and $ascii < 256 )
    {    $nstr .= "&#". (string)(848 + ord($symbol)).';';    }
    else
    {    $nstr .= $symbol;    }
} // end of for( $i ) loop

return( $nstr );
} // end of function str_rus


С ней тоже самое, почти такая же ошибка
Warning: getimagesize(http://testcms.com/cms_s01_upload_files/images/Фото-0006.jpg) [function.getimagesize]: failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in Z:\home\testcms.com\www\cms_s01_libs\tiny_mce\plugins\filemanager\php\functions.php on line 91


Вариант переименовывать файл на ходу при закачке на  сайт, в числа например не подходит. Так как файлы могут быть закачены через фтп как они есть.

Автор: Avrely 19.8.2009, 19:21
Код


$file = "картинка.jpg"; //название файла

$file_oldName = $file; //резервируем в другой переменной название файла, чтобы применить в rename()
//простой транслит
$file=strtr($file,"абвгдеёзийклмнопрстуфхъыэ",

    "abvgdeeziyklmnoprstufhiei");
    $file=strtr($file,"АБВГДЕЁЗИЙКЛМНОПРСТУФХЪЫЭ",

    "abvgdeeziyklmnoprstufhiei");

   

 // Затем - "многосимвольные" и некторые символы.

    $file=strtr($file, 

                    array(

                        "ж"=>"zh", "ц"=>"ts", "ч"=>"ch", "ш"=>"sh", 

                        "щ"=>"shch","ь"=>"", "ю"=>"yu", "я"=>"ya",

                        "Ж"=>"ZH", "Ц"=>"TS", "Ч"=>"CH", "Ш"=>"SH", 

                        "Щ"=>"SHCH","Ь"=>"", "Ю"=>"YU", "Я"=>"YA",

                        "ї"=>"i", "Ї"=>"Yi", "є"=>"ie", "Є"=>"Ye", " " => "_",
                        "'" => "",  "$" => "", "*" => "", "&" => "_and_", "`" => ""
                      , "\"" => "", "&" => "and", "!" => "", "@" => "", 
                       "#" => "", "$" => "", "%" => "", "^" => "", "*" => "", 
                      "(" => "", ")" => "", "~" => "", "{" => "", "}" => "", "[" => "",
                       "]" => "", ";" => "", ":" => "", "?" => "", "<" => "", 
                      ">" => "", "№" => "_number_", "’" => "", "," => "",
                        "+" => "_plus_"
                        )
                 );

        rename($file_oldName, $file);
       echo $file;




Добавлено @ 19:25
Если неработает rename(), то следует использовать http://php.net/system() иногда помогает

 smile

Автор: supercelt 20.8.2009, 15:03
Avrely, получается будут заменяться русские буквы на транслит?. 
Но ведь как-то делают же, что название файла остаётся русскими буквами и всё работает...

Автор: nerezus 20.8.2009, 15:46
supercelt, запусти на серверной ОС свой скрипт и удивишься - он будет работать.

Это все из-за бага в винде(ага, фича прям), согласно которому кодировки в GUI и кодировка ФС разные(cp1251 и cp866).

Автор: supercelt 26.8.2009, 23:33
понял, спасибо

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)