PHP - 通过更改.zip文件名,在从中读取文件时不会更改其路径

时间:2013-07-17 09:57:48

标签: php utf-8 zip

我有.zip个文件,名称为Café, Room service, deli'very.zip。我可以通过删除特殊字符来更改.zip文件的名称。

$string = str_replace(array(","),array(""),$string);

$accent   = 'ŠŒŽšœžŸ¥µÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûýýþÿŔŕƒ';
$noaccent = 'SOZsozYYuaaaaaaaceeeeiiiidnoooooouuuuybsaaaaaaaceeeeiiiidnoooooouuuyybyRra';
$string = strtr(utf8_decode($string),utf8_decode($accent),$noaccent);
$string = strtr($string, $accent, $noaccent);

现在问题是当我从.zip读取文件时,它引用了它的原始.zip名称,而不是我所做的新更改名称。

修改

我可以将.zip文件名从Café, Room service, deli'very.zip更改为Cafe Room service, delivery.zip但是当从.zip文件中读取时,请说1.jpg,然后它就像Café, Room service, deli'very/1.jpg那样读取路径

有人可以专注吗?

编辑:

我正在使用以下代码来处理.zip文件

$zip = zip_open($_FILES['tmp_name']);
$zipEntry = zip_read($zip);
zip_entry_name($zipEntry);

3 个答案:

答案 0 :(得分:1)

路径被编码为zip数据的一部分。它不是基于zip文件名。 单独更改文件名不会更改zip文件中的路径。

答案 1 :(得分:1)

zip文件是目录的压缩内容。

该目录包含在zip文件中,并不是从zip文件的名称生成的,因此您可以调用zip文件。 foo.zip,它仍然包含相同的文件和目录。 zip文件的名称与包含的目录相同,但它们不是一回事。

更改zip文件内容的最简单方法是

  • 解压缩
  • 重命名目录
  • 压缩新目录

答案 2 :(得分:0)

我找到了一个问题的解决方案,因为很久以来我一直在寻找这个问题 在这里我的解决方案。

$_FILES['name'] = str_replace("'","_",$_FILES['name']);
$_FILES['name'] = preg_replace("/[^a-zA-Z0-9.\s\/]/", "", $_FILES['name']);

我要截断任何特殊字符并将其替换为""。允许Ascii字符,空格和松弛(向前)。在这样做之后,我能够正确地读取.zip文件下的目录,子目录和文件以及特殊字符(任何语言)。我特别感谢一位为其他Solution

提供Question的朋友