Php 在CentOS计算机上使用umlauts保存文件

Php 在CentOS计算机上使用umlauts保存文件,php,file-upload,unicode,character-encoding,filenames,Php,File Upload,Unicode,Character Encoding,Filenames,我们有一台带有Apache Web服务器的CentOS 6机器,它接受来自富Javascript客户端的文件上传。这些文件是用php的move\u-uploaded\u文件保存的 客户端和服务器(php)文件都用iso-8859-1编码,服务器上的数据库也是如此。此外,html输出将iso-8859-1声明为字符集 到目前为止,文件上传工作正常,但带有umlauts(或其他未知特殊字符)的文件会导致错误。例如,文件1.Nachtrag Gemeinde Höchst.pdf在应用程序中得到正确的

我们有一台带有Apache Web服务器的CentOS 6机器,它接受来自富Javascript客户端的文件上传。这些文件是用php的
move\u-uploaded\u文件保存的

客户端和服务器(php)文件都用iso-8859-1编码,服务器上的数据库也是如此。此外,html输出将iso-8859-1声明为字符集

到目前为止,文件上传工作正常,但带有umlauts(或其他未知特殊字符)的文件会导致错误。例如,文件
1.Nachtrag Gemeinde Höchst.pdf
在应用程序中得到正确的回显,并且为下载文件而生成的链接具有正确的(url-)编码:

http://ourdomain/saba/data/dok/00000092/1.Nachtrag%20Gemeinde%20H%C3%B6chst.pdf
但是当点击这个链接时,会出现404错误。在shell中查找文件时,它会显示为
1.Nachtrag Gemeinde H?chst.pdf
,这表示某种编码错误,尽管这可能只是因为shell使用utf-8编码


我们忘记了什么?

正如@Amadan正确指出的,文件名在保存之前需要转换为utf-8,即:

 $filename = iconv('ISO-8859-1', 'UTF-8', $filename);
 $is_successful = @move_uploaded_file($tmp_filename, $ordnername . DIRECTORY_SEPARATOR . $filename);

我想你回答了你自己的问题<代码>iconv转换为UTF-8,或标准化为ASCII。