Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/241.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP-通过更改.zip文件名,在从中读取文件时不会更改其路径_Php_Utf 8_Zip - Fatal编程技术网

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

PHP-通过更改.zip文件名,在从中读取文件时不会更改其路径,php,utf-8,zip,Php,Utf 8,Zip,我有以下.zip文件,文件名为咖啡馆、客房服务、熟食店.zip。我可以通过删除特殊字符来更改.zip文件名 $string = str_replace(array(","),array(""),$string); $accent = 'ŠŒŽšœžŸ¥µÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûýýþÿŔŕƒ'; $noaccent = 'SOZsozYYuaaaaaaaceeeeiiiidnoooooouuuuyb

我有以下
.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
文件名从
咖啡馆,客房服务,熟食店.zip
更改为
咖啡馆客房服务,送货.zip
,但当从.zip文件读取时,说
1.jpg
,然后它的读取路径类似于
咖啡馆,客房服务,熟食店/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
文件下带有特殊字符的目录、子目录和文件(任何语言)。我特别感谢一位朋友为其他人提供了

你的意思是zip中的路径指的是旧路径吗?-这是在zip中编码的,而不是基于文件名。@John3136是的。从Zip读取文件时,它引用的是旧路径(.Zip文件名),而不是我所更改的路径。那么,我如何更改该
.Zip
文件下所有文件的路径,以便它们都可以获取新更改的
.Zip
文件名?可能是指向Zip的参数,告诉它解压缩到哪里?很难说,因为我们不知道你怎么称呼zip…我很感激你的解释。你不能通过改变书名来改变书的内容。即使您的zip文件名为foo.zip,但在zip文件中仍然有一个名为“Café,Room service,deli'very”的目录,我感谢您的解释。