上传到服务器时损坏的西里尔文件名

时间:2014-01-28 12:31:26

标签: php image upload cyrillic

enter image description here我有这个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=&gt;我可以看到图像.. 你能不能让我知道是什么刹车图像名称看起来很正常?

1 个答案:

答案 0 :(得分:0)

  1. 当您使用ftp客户端浏览ftp时,您会看到ANSI编码的名称(单字节编码)。在这种情况下,РЅРѕРІР°-категория.png实际上是UTF-8(双字节)编码нова-категория.png

  2. 当您将文件上传到网络服务器时,浏览器会将文件名中的非unicode符号转换为UTF-8(нова-категория.png变为РЅРѕРІР°-категория.png

  3. 当您请求site.com/images/pc/нова-категория.png浏览器再次将非unicode符号转换为UTF-8时,服务器实际上会查找РЅРѕРІР°-категория.png(在ASCI编码中)。

  4. 所以,如果你想看到&#34;正常&#34; ftp-client中的名称,您应该将它们转换为您的本机编码

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

    但在这种情况下,您的文件网址会出现问题。 要将正确的URL写入ANSI编码的名称,您应该使用此PHP代码:

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

    您应该处理文件名的方式取决于您对该文件的使用。 但是我不建议你转换它们。如果你有问题,我认为它不会被打破&#34;名。