Неверное имя файла кириллицы при загрузке на сервер

введите описание изображения здесьУ меня есть эта функция PHP:

function upload_file($f,$fn){
switch($f['type']){
case 'image/jpeg':$image = imagecreatefromjpeg($f['tmp_name']);break;
case 'image/png':case 'image/x-png':move_uploaded_file($f['tmp_name'],'../images/pc/'.$fn.'.png');break;
case 'image/pjpeg':$image = imagecreatefromjpeg($f['tmp_name']);break;
echo $f['type'],'<br />';
}
if(!empty($image)) imagejpeg($image,'../images/pc/'.$fn.'.png');
}    

где $fn = "нова-категория", но когда я загружаю переименованный файл на сервер - имя изображения не работает и выглядит так: РЅРѕРІР°-категория.png

Интересно то, что если я попытаюсь посетить изображение на сервере: site.com/images/pc/нова-категория.png => я могу увидеть изображение.. Можете ли вы дать мне представление о том, что тормозит имя изображения, чтобы посмотреть нормальный?

1 ответ

  1. Когда вы просматриваете ftp с клиентом ftp, вы видите ANSI-кодированные имена (однобайтовые кодировки). В этом случае РЅРѕРІР°-категория.png на самом деле UTF-8 (двухбайтовый) кодируется нова-категория.png

  2. Когда вы загружаете файл на веб-сервер, браузер конвертирует символы не в кодировке Юникод в имени файла в UTF-8 (нова-категория.png становится РЅРѕРІР°-категория.png)

  3. Когда вы запрашиваете site.com/images/pc/нова-категория.png браузер снова конвертирует символы не в юникоде в UTF-8, и сервер фактически ищет РЅРѕРІР°-категория.png (в ASCI-кодировке).

Поэтому, если вы хотите видеть "нормальные" имена в ftp-клиенте, вам следует преобразовать их в вашу нативную кодировку

function upload_file($f,$fn){
$fn=iconv("UTF-8","Windows-1251",$fn);
switch($f['type']){
...

Но в этом случае у вас будут проблемы с URL-адресами ваших файлов. Чтобы написать правильный URL для имен в кодировке ANSI, вы должны использовать этот php-код:

echo "site.com/images/pc/".rawurlencode("нова-категория.txt");

Способ обработки имен файлов зависит от того, как вы их используете. Но я не рекомендую вам конвертировать их. Если у вас есть проблемы, я думаю, что это не в "сломанных" именах.

Другие вопросы по тегам