文件编码PHP的ZIP Archive类中的名称

时间:2016-08-05 15:51:47

标签: php linux windows encoding utf-8

设置

  • 用户使用Windows资源管理器的ZIP功能
  • 创建文件夹的ZIP格式
  • 档案可能包含像'öäüÖÄÜß'
  • 这样的变音字符
  • 用户使用POST请求上传文件,该请求调用PHP脚本

问题

  

无论脚本是否在我的脚本上执行,文件名的编码都是不同的   Windows测试机或Linux生产系统。

症状

我使用标准ZIP extension

提取有关ZIP存档中上传文件的信息
$statDetails = $zip->statIndex( $index )

然后我发出条目的名称:

echo $statDetails[ 'name' ];

请注意,HTTP连接和HTML元数据描述网页[= HTTP回复]的内容为 UTF-8编码

Windows 测试计算机上的输出:

-RAW Test_A/2015/Dänisch/

Linux 生产计算机

-RAW Test_A/2015/D�nisch/
  

请注意,Linux计算机上的文件名不再是UTF-8

我尝试使用iconv将Linux机器上的上述字符串转换为Latin1 / ISO-8859-1。所有文件名的所有字符都适合Latin1。

不幸的是,我找不到匹配的文本编码。

问题

由于Windows和Linux上的结果不同:

  • 我可以以某种方式影响ZIP extension的行为吗?以编程方式或通过ini-settings方式?
  • 我可以强制 ZIP extension返回ZIP中的非重新编码名称文件吗?
  • 当我使用statIndex()检索文件信息时ZIP extension使用的编码是什么?

由于两个PHP版本都大于5.2。*,因此它们都应该使用zlib作为documented here

0 个答案:

没有答案