PHP,UTF-8,IIS和Fileupload

问题描述:

我使用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

如果我不是完全错误的,文件名是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

在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。