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


PHP - By changing .zip file name, does not changes its path while reading file from it

我有以下名为Café, Room service, deli'very.zip.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);

路径作为zip数据的一部分进行编码。它不是基于zip文件名。仅更改文件名不会更改zip文件中的路径。

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

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

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

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

我找到了一个问题的解决方案,我一直在寻找这个问题
这是我的解决方案。

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

其中,我截断了任何特殊字符,并将其替换为不包含""。允许Ascii字符、空格和松弛(向前)。完成这项操作后,我能够正确地读取.zip文件下的目录、子目录和带有特殊字符的文件(任何语言)。我特别感谢一位为其他问题提供解决方案的朋友