2012-03-16 54 views
2

我使用MSSQL-Server 2005的PHP 5.3和MS的MSSQL-Server(PDO)驅動程序。PHP,UTF-8,IIS和Fileupload

我最近在使用驅動程序的新版本和它用來從數據庫傳遞數據的字符集方面掙扎了一點點。所以我決定將我的整個應用程序配置爲UTF-8,以便將來避免這類問題。

因此,我將數據庫更改爲使用unicode數據類型,配置了HTML標頭並設置了Eclipse以將代碼文件保存爲UTF-8格式。此外,我添加了對應的accept-charset標籤給我所有的HTML表單。到現在爲止還挺好。一切都按預期工作,但現在我陷入了一個新問題。

我寫了一個簡單的腳本,可以使用HTML表單上傳文件並將它們保存在我的網絡服務器(帶有IIS6的Windows Server 2003)上。這工作完美,直到我切換到UTF。當我用文件名上傳帶有特殊字符的文件時,這些文件不能正確保存。替換名爲「ÄÖÜ.txt」的文件最終會在我的網絡服務器上生成一個名爲「Ã」Ã-Ãœ.txt「的文件。這可能是一種痛苦,因爲這些文件的所有進一步處理都依賴於不再正確的超鏈接。

我試過幾個可能的解決方案是這樣的:

$isMoved = move_uploaded_file($_FILES['uploadedFile']['tmp_name'],"myFolder". utf8_encode($_FILES['uploadedFile']['name'])); 

但我總是結束upth eiher其對服務器的文件系統中的正確的文件名或其他在周圍。

任何想法? :d

在此先感謝 丹尼爾

+0

您是否已經將HTML和PHP文件的字符集更改爲UTF-8? – Dion 2012-03-20 22:20:55

+0

您如何查看文件系統上的文件?他們是UTF-8嗎? – 2012-04-18 12:08:59

回答

0

如果我不是完全錯誤的,文件名是UTF-8編碼。只需使用mb_convert_encoding()對其進行解碼:

$filename = mb_convert_encoding($_FILES['uploadedFile']['name'], 'ISO-8859-1', 'UTF-8'); 
$isMoved = move_uploaded_file($_FILES['uploadedFile']['tmp_name'], "myFolder".$filename); 

BurninLeo

0

在Windows Sever的2012使用PHP 5.6 IIS8我終於設法與正確上傳,展示和下載使用

$filename = mb_convert_encoding(basename($_FILES['file']['name']),'ISO-8859-1', 'UTF-8'); 
變音文件

在我上傳腳本和

$filename = utf8_encode(basename($file)); 
在我的顯示

並下載腳本。

當這樣一個上傳的文件將被刪除時,傳遞給取消鏈接的文件名可能必須使用mb_convert_encoding再次轉換爲ISO-8859-1。