Я предоставляю свой код здесь, здесь $ attchmntName идет как китайские символы, но после выполнения функции $ zip-> addFile для имени вложения, при загрузке и разархивировании вложений, имена файлов с китайскими и японскими символами отображаются специальными символами.
<?php
ob_start();
include_once (__DIR__ . '/../../config.php');
include_once('../emails/EmailObject/EmailAttachment.php');
$filePath = $_POST['filePath'];
$attchmntDtls = $_POST['attchmntDtls'];
error_reporting(E_ALL);
$zip = new ZipArchive();
//$zipName = time().".zip"; // Zip name
$zipName = "Email.zip";
$zip->open($zipName, ZipArchive::CREATE);
foreach ($attchmntDtls as $attchmntDtl) {
$path = $filePath."/".$attchmntDtl['fs_name'];
if(file_exists($path)){
//$zip->addFromString(basename($path), file_get_contents($path));
$attchmntName = $attchmntDtl['attachment_name'];
$attchmntName = iconv_mime_decode($attchmntName,0, "UTF-8");
//$attchmntName = htmlspecialchars($attchmntName);
$zip->addFile($path, $attchmntName);
} else {
echo"file does not exist";
}
}
$fileExists = $zip->filename;
$zip->close();
$objEmailAttachment = new EmailAttachment;
$mimeType = $objEmailAttachment->get_mime_type($zipName);
if(file_exists($fileExists)){
$content = file_get_contents($fileExists);
$length = strlen($content);
header('Content-Description: File Transfer');
header('Content-Type: '.$mimeType);`enter code here`
header('Content-Disposition: attachment; filename="'.$zipName.'"');
header('Content-Length: ' . $length);
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Expires: 0');
header('Pragma: public');
header('Set-Cookie: fileDownload=true; path=/');
readfile($fileExists);
ob_clean();
flush();
$statusOfMoving = rename($fileExists,$filePath."/".$zipName);
if($length>0){
echo $content;
exit;
}
} else {
exit();
}
?>
Задача ещё не решена.
Других решений пока нет …