PHP+;ZipArchive+;俄语

PHP+;ZipArchive+;俄语,php,zip,unzip,Php,Zip,Unzip,我有下面的代码 $zip = new ZipArchive; $res = $zip->open('tmp/articles.zip'); if ($res === TRUE) { $zip->extractTo('tmp/'); $zip->close(); } 它适用于具有英文文件名的档案,但如果我使用俄文字符创建档案,则会产生无法读取的文件名。我该怎么办 UPD:当我从bash中使用“解压”时,它也不能正常工作。看看下面的代码: $z =

我有下面的代码

  $zip = new ZipArchive;
  $res = $zip->open('tmp/articles.zip');
  if ($res === TRUE) {
    $zip->extractTo('tmp/');
    $zip->close();
  }
它适用于具有英文文件名的档案,但如果我使用俄文字符创建档案,则会产生无法读取的文件名。我该怎么办

UPD:当我从bash中使用“解压”时,它也不能正常工作。

看看下面的代码:

$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”。
希望您可以更改此代码以创建重命名算法:)

查看此代码:

$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”。

希望您可以更改此代码以创建重命名算法:)

此方法并不总是有效。我发现自己安装了一个像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):


希望它能帮助人们不要花费数小时试图找出特定压缩文件的编码字符集。

这种方法并不总是有效的。我发现自己安装了一个像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):


希望它能帮助人们不要花费数小时试图找出特定压缩文件的编码字符集。

@Ximik:在什么操作系统上,目标操作系统是什么?在Windows XP上。目标操作系统是Debian。但是我的archlinux上也有同样的问题。@Ximik:所以是NTFS/FAT32/FAT16/…到ext3/ext2/…?@Gumbo问题不在文件系统中,在Win7/Win7(源/目标)中也有同样的行为。@OZ:那么可能是WinRAR。您尝试过其他软件吗?@Ximik:在什么操作系统上,目标操作系统是什么?在Windows XP上。目标操作系统是Debian。但是我的archlinux上也有同样的问题。@Ximik:所以是NTFS/FAT32/FAT16/…到ext3/ext2/…?@Gumbo问题不在文件系统中,在Win7/Win7(源/目标)中也有同样的行为。@OZ:那么可能是WinRAR。你试过别的软件吗?