2014-01-28 29 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"); 

你應該處理文件名的方法是取決於你使用的文件。 但我不建議你轉換它們。如果你有問題,我認爲它不是「破」的名字。