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”的目录,我感谢您的解释。