此代码可以正常生成包含所需文件的ZIP文件,但存档中的文件名除外,它们不是英文(在这种情况下是希伯来语),有奇怪的字符而不是正确的希伯来字母。
<?php
$filesfordown = $_POST['GEMin'];
if(empty($filesfordown))
{
echo "No files were seleceted for download.";
}
else
{
$zip_name = "RMW." . time() . ".zip";
$zip = new ZipArchive;
$zip->open($zip_name, ZipArchive::CREATE);
foreach ($filesfordown as $filefordown) {
$zip->addFile($filefordown);
}
$zip->close(); }
header('Content-Type: application/zip');
header("Content-disposition: attachment; filename='$zip_name'");
header('Content-Length: ' . filesize($zip_name));
readfile($zip_name);
ob_flush;
?>
我做了一些搜索,似乎iconv,setlocalte或mb_convert_encoding可能会有所帮助,但无论我尝试什么都行不通。
有什么想法吗?
P.S。作为一个附带问题,有没有办法不在zip中保留目录结构?
ETA:
$_post
的示例可以是www.domain.com/path/שלום_01.mp3
答案 0 :(得分:5)
耶!固定!
首先是代码,然后是解释:
<?php
setlocale(LC_ALL, 'he_IL.UTF-8');
$filesfordown = $_POST['GEMin'];
if(empty($filesfordown))
{
echo "לא נבחרו.. נסה שוב";
}
else
{
$zip_name = "RMW" . time() . ".zip";
$zip = new ZipArchive;
$zip->open($zip_name, ZipArchive::CREATE);
echo "מכין את ההורדה...";
foreach ($filesfordown as $filefordown) {
$zip->addFile($filefordown, iconv("UTF-8","CP862",basename($filefordown)));
}
$zip->close();
需要更改3件事。
setlocale()
需要在最后加入.UTF-8。$localname
,基本上iconv("UTF-8","CODE_PAGE_REF",$localname)
答案 1 :(得分:1)
它也适用于:iconv("UTF-8", "CP852", $nameFile);