Проблема с арабским именем вложения PHPMailer

#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 не от PHPMailer

4. Не имеет значения, как вы создаете прикрепленный файл или данные; PHPMailer не волнует, что в нем находится. Вам не нужно задавать кодировку или тип MIME, если расширение файла известно (а .pdf это так).

5. Хорошо, тогда, вероятно, следует закрыть это, если только вы не можете связать это с известной ошибкой dompdf.