【问题标题】:PHP - By changing .zip file name, does not changes its path while reading file from itPHP - 通过更改 .zip 文件名,在从中读取文件时不会更改其路径
【发布时间】:2013-07-17 09:57:48
【问题描述】:

我有以下名称 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 中编码而不是基于文件名。
  • @John3136 是的。从 Zip 读取文件时,它指的是旧路径(.zip 文件名),而不是我更改的内容。

标签: php utf-8 zip


【解决方案1】:

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

【讨论】:

  • 那么,如何更改.zip文件下所有文件的路径,以便它们都可以获取.zip文件的新更改名称?
  • 可能 args to zip 告诉它解压到哪里?很难说,因为我们不知道你怎么称呼 zip...
  • 感谢您的精彩解释。
【解决方案2】:

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

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

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

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

【讨论】:

  • 您无法通过更改图书名称来更改图书的内容。即使您的 zip 文件名为 foo.zip,在 zip 文件中仍然有一个名为“Café, Room service, deli'very”的目录
  • 感谢您的精彩解释。
【解决方案3】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-25
    • 2015-07-29
    • 1970-01-01
    • 1970-01-01
    • 2020-05-09
    • 1970-01-01
    • 2013-10-10
    • 2021-09-02
    相关资源
    最近更新 更多