如何在php中的zip文件名中“标准化”重音字符?

时间:2013-01-30 21:52:13

标签: php encoding

我的linux服务器上已经保存了很多拉链,管理它们的应用程序必须提取包含的文件。

然而,拉链的上传者有时会在文件名中加入重音字符,所以当php提取文件名时,我可以得到一些带有混乱编码的名字,特别是当在windows中创建zip时。

从zip中提取文件名的代码是:

  

$ zip = zip_open($ zipFile);

     

while($ zip_entry = zip_read($ zip))
    $ ArrayInternalFileNames [] = zip_entry_name($ zip_entry);

我对$ ArrayInternalFileNames内容做了什么,以便不使用“混乱编码”字符?问题是由于编码混乱,php字符串函数不能很好地处理这些文件名。

4 个答案:

答案 0 :(得分:1)

您可以尝试使用iconv()将文件名音译为ASCII:

$filename = iconv('UTF-8', 'ASCII//TRANSLIT', $string);

答案 1 :(得分:1)

除了Sammitch的回答。

另一种音译选择:

$file_name=iconv("UTF-8", "ISO-8859-1//TRANSLIT", $file_name);

答案 2 :(得分:0)

你可以尝试:

mb_convert_encoding($zip_entry, 'UTF-8');

这将删除任何不需要的字符。否则,请查看strtr(),这样您就可以将一组字符翻译成另一组字符。

答案 3 :(得分:0)

确保您的源名称是UTF-8。然后:

$file_name=iconv("UTF-8", "IBM850", $file_name);

zip中的文件名必须为IBM850编码。