#php #phpmailer
Вопрос:
Я использую dompdf
для создания PDF-файла, а затем отправляю его с помощью PHPmailer
. Но проблема в том, что имя файла сгенерированного PDF-файла неверно.
Вот код:
//PDF from dompdf $pdf = $dompdf-gt;output(); //PHPmailer confiurgation $mail-gt;IsSMTP(); $mail-gt;CharSet = 'UTF-8'; //PDF name $name = 'محمد احمد علي'; $pdfName = str_replace(" ", "_", $name); //Replace spaces with _ $pdfName .= ".pdf"; //Attach PDF $mail-gt;AddStringAttachment($pdf, $pdfName);
В этом случае должно быть имя PDf محمد_احمد_علي.pdf
. Но это _احمد_علي.pdf
Я пытался:
$encoding = 'base64'; $type = 'application/pdf'; $mail-gt;AddStringAttachment($pdf, $pdfName, $encoding, $type);
Также:
$mail-gt;Encoding = "base64";
Но безуспешно.
Я не вижу проблемы с именем строки, как при выполнении следующего кода:
$name = 'محمد علي احمد'; $name = str_replace(' ', "_", $name); echo $name . '.pdf';
Я получаю ожидаемый результат.
Как решить эту проблему?
Обновить
Я просто пытался:
$dompdf-gt;stream($filename);
Чтобы загрузить PDF-файл без его отправки. И это тот же результат, так что я не знаю, откуда берется проблема.
Новое обновление На случай, если это случится с кем-нибудь в будущем.
Я выяснил, почему это происходит. Dompdf
используется basename()
в имени файла. И с моим арабским именем эта функция приводит к тому, что все идет не так, как надо.
Действительно печально, что языки программирования и библиотеки игнорируют языки RTL, такие как арабский.
Итак, запускаем этот код:
echo basename('محمد احمد علي');
Бы вернулся احمد علي
Комментарии:
1. Я только что проверил это и обнаружил, что имя вложения выбрано правильно. Вы используете последнюю версию PHPMailer?
2. @Синхро, Да. Как вы создали прикрепленный файл?
3. Я выяснил, почему это происходит. Это
Dompdf
не от PHPMailer4. Не имеет значения, как вы создаете прикрепленный файл или данные; PHPMailer не волнует, что в нем находится. Вам не нужно задавать кодировку или тип MIME, если расширение файла известно (а
5. Хорошо, тогда, вероятно, следует закрыть это, если только вы не можете связать это с известной ошибкой dompdf.