标签:hebrew ziparchive php
此代码可以正常工作,使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可能会有所帮助,但无论我尝试什么都行不通.
有任何想法吗?
附:作为一个附带问题,有没有办法不在zip中保留目录结构?
ETA:
$_post的一个例子可能是www.domain.com/path/שלום_01.mp3
解决方法:
好极了!固定!
首先是代码,然后是解释:
<?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件事.
>验证实际的php文件是否为UTF-8.
> setlocale()需要在末尾包含.UTF-8.
> ZipArchive无法正确处理UTF-8.必须使用CP.希伯来语是CP862.因此,为addFile使用额外的选项$localname,它的基本iconv(“UTF-8”,“CODE_PAGE_REF”,$localname)
标签:hebrew,ziparchive,php 来源: https://codeday.me/bug/20191001/1838465.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。