我有以下名为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文件内容的最简单方法是使用
- 解压缩
- 重命名目录
- 压缩新目录
我找到了一个问题的解决方案,我一直在寻找这个问题
这是我的解决方案。
$_FILES['name'] = str_replace("'","_",$_FILES['name']);
$_FILES['name'] = preg_replace("/[^a-zA-Z0-9.'s'/]/", "", $_FILES['name']);
其中,我截断了任何特殊字符,并将其替换为不包含""
。允许Ascii字符、空格和松弛(向前)。完成这项操作后,我能够正确地读取.zip
文件下的目录、子目录和带有特殊字符的文件(任何语言)。我特别感谢一位为其他问题提供解决方案的朋友