首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP + ZipArchive +俄语

PHP + ZipArchive +俄语
EN

Stack Overflow用户
提问于 2011-05-29 01:17:47
回答 2查看 6K关注 0票数 1

我有下面的代码

代码语言:javascript
复制
  $zip = new ZipArchive;
  $res = $zip->open('tmp/articles.zip');
  if ($res === TRUE) {
    $zip->extractTo('tmp/');
    $zip->close();
  }

它适用于使用英文文件名的归档文件,但如果我使用俄文字符创建archieve,我的文件名就无法读取。我该怎么办?

UPD:当我在bash中使用"unzip“时,它也不能正常工作。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-05-29 02:04:09

看看这段代码:

代码语言:javascript
复制
$z = new ZipArchive();
$res = $z->open('C:\Temp\Temp.zip');
if ($res)
{
    $z->extractTo('C:\Temp\Temp');
    $z->close();
}

$files = scandir('C:\Temp\Temp');
foreach ($files as $filename)
{
    print iconv('cp866', 'utf-8', $filename).PHP_EOL;
}

这段代码打印正常的文件名。

因此,WinRar将旧的ms-dos字符集'cp866‘用于西里尔文。

希望你能修改这段代码来创建重命名算法:)

票数 3
EN

Stack Overflow用户

发布于 2014-10-16 03:06:09

这种方法并不总是有效的。我发现自己安装了一个像7zip这样的外部库来完成这项工作,它解决了这个问题。在windows中很难知道文件所使用的编码字符集。在我的例子中,我不得不这样做,以避免在提取后文件名中出现错误。以下是我的变量:

代码语言:javascript
复制
  // Extract file.
  $tmp_dir = uniqid();
  $zip_uri = "test.zip";
  $destination_dir = "C:\\Users\\user\\AppData\\Local\\Temp\\$tmp_dir";

这是ZipArchive方法:

代码语言:javascript
复制
$zip = new ZipArchive();
$zip->open($zip_uri);
if (!$zip->extractTo($destination_dir)) {
    die("Error extracting files.");
}
$zip->close();

这种方法并不总是有效,但以下方法确实有效(使用7Zip):

代码语言:javascript
复制
exec("C:\\7zip\\7za.exe e $zip_uri -o$destination_dir");

希望它能帮助某些人不再花几个小时试图弄清楚一个特定压缩文件的编码字符集。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6163173

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档