我有下面的代码
$zip = new ZipArchive;
$res = $zip->open('tmp/articles.zip');
if ($res === TRUE) {
$zip->extractTo('tmp/');
$zip->close();
}它适用于使用英文文件名的归档文件,但如果我使用俄文字符创建archieve,我的文件名就无法读取。我该怎么办?
UPD:当我在bash中使用"unzip“时,它也不能正常工作。
发布于 2011-05-29 02:04:09
看看这段代码:
$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‘用于西里尔文。
希望你能修改这段代码来创建重命名算法:)
发布于 2014-10-16 03:06:09
这种方法并不总是有效的。我发现自己安装了一个像7zip这样的外部库来完成这项工作,它解决了这个问题。在windows中很难知道文件所使用的编码字符集。在我的例子中,我不得不这样做,以避免在提取后文件名中出现错误。以下是我的变量:
// Extract file.
$tmp_dir = uniqid();
$zip_uri = "test.zip";
$destination_dir = "C:\\Users\\user\\AppData\\Local\\Temp\\$tmp_dir";这是ZipArchive方法:
$zip = new ZipArchive();
$zip->open($zip_uri);
if (!$zip->extractTo($destination_dir)) {
die("Error extracting files.");
}
$zip->close();这种方法并不总是有效,但以下方法确实有效(使用7Zip):
exec("C:\\7zip\\7za.exe e $zip_uri -o$destination_dir");希望它能帮助某些人不再花几个小时试图弄清楚一个特定压缩文件的编码字符集。
https://stackoverflow.com/questions/6163173
复制相似问题