1

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

但是,zip 的上传者有时会在文件名中添加重音字符,因此当 php 提取文件名时,我可能会得到一些编码混乱的名称,特别是在 windows 中创建 zip 时。

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

$zip = zip_open ( $zipFile ) ;

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

我应该如何处理 $ArrayInternalFileNames 内容,以免出现“乱码”字符?问题是由于编码混乱,php 字符串函数不能很好地处理这些文件名。

4

4 回答 4

1

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

$filename = iconv('UTF-8', 'ASCII//TRANSLIT', $string);
于 2013-01-30T22:18:20.250 回答
1

除了萨米奇的回答。

另一种音译选择:

$file_name=iconv("UTF-8", "ISO-8859-1//TRANSLIT", $file_name);
于 2014-05-15T21:33:25.023 回答
1

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

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

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

于 2016-05-19T13:22:11.487 回答
0

你可以试试:

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

这将删除任何不需要的字符。否则,请查看strtr()它将允许您将一组字符转换为另一组字符。

于 2013-01-30T21:56:57.397 回答