1

我有.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.zipCafe 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);
4

3 回答 3

1

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

于 2013-07-17T10:09:37.977 回答
1

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

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

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

  • 解压
  • 重命名目录
  • 压缩新目录
于 2013-07-17T10:16:46.627 回答
0

我为我长期以来一直在寻找的问题提供了解决方案。
这是我的解决方案。

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

我在哪里截断任何特殊字符并用 nothing 替换它们""。允许 Ascii 字符、空格和 slack(向前)。这样做之后,我可以正确地读取文件下的目录、子目录和文件,并.zip带有特殊字符(任何语言)。我特别感谢一位为其他问题提供解决方案的朋友

于 2013-09-04T08:05:29.777 回答