2014-01-28 23 views
0

enter image description here我有这个PHP函数:上传到服务器时破碎cyrilic文件名

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=>我可以看到图像.. 你能给我一个想法什么刹车图像名称看起来正常? 提前谢谢!

+0

嘿,我删除我的答案,因为它不能解决您的问题,并且没有答案的帖子会获得更多的知名度。我仍在监控线程,只要你通过'@ Matt'通知我,我会继续尝试帮助你。 – Matt

回答

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

  2. 当您上传文件到Web服务器,浏览器将非Unicode的符号,文件名UTF-8(нова-категория.png成为РЅРѕРІР°-категория.png

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

所以,如果你想看到的FTP客户端“正常”的名字,你应该将它们转换成你的本地编码

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"); 

你应该处理文件名的方法是取决于你使用的文件。 但我不建议你转换它们。如果你有问题,我认为它不是“破”的名字。