Проблемы с использованием UTF-8 с PHPMailer - PullRequest
0 голосов
/ 28 января 2019

Я использую PHPMailer 5 для отправки текстовых электронных писем из форм.Похоже, что некоторые пользователи вставляют содержимое из word в поля textarea, и получающееся электронное письмо содержит множество нечитаемых символов (например,).

Я попытался добавить $ mail-> CharSet= 'UTF-8';и это, кажется, исправляет тесты, которые я сделал (например, списки маркеров теперь проходят правильно).

$mail = new PHPMailer;
$mail->CharSet = 'UTF-8';
$mail->ContentType = 'text/plain'; 
$mail->IsHTML(false);

Есть ли какие-либо проблемы безопасности или другие проблемы, которые могут возникнуть из-за установки набора символов в UTF-8

1 Ответ

0 голосов
/ 28 января 2019

Вы делаете это правильно.По умолчанию PHPMailer (как и внутренняя функция PHP mail) использует набор символов ISO-8859-1, поскольку его можно использовать при отсутствии расширения PHP * mbstring, которое не доступно по умолчанию - и если у вас его нетэто расширение, поддержка UTF-8 не будет работать.После того, как вы переключитесь на использование UTF-8, вся ваша цепочка инструментов должна также использовать UTF-8 - ваши редакторы, вашу базу данных, ваше соединение с базой данных.Вам также следует опасаться таких функций, как strlen и substr, которые не являются безопасными в UTF-8, поскольку работают в байтах, а не в символах (длина которых может превышать 1 байт).Всякий раз, когда что-то из этого получается неправильно, вы увидите, какая у вас коррупция.Это хорошее упражнение - придерживаться некоторых сложных строк для тестирования (хотя см. мой ответ об этом ), чтобы убедиться, что он прошел невредимым.

К сожалению, MS Word - один из лучшихпримеры того, как сделать UTF-8 плохо;он часто смешивает текст с ненужными необычными символами, дополнительными символами управления и т. д., поэтому я бы посоветовал сделать некоторую интенсивную фильтрацию для ваших входов - редакторы, такие как CKEditor, имеют встроенные фильтры, чтобы помочь справиться с проблемами Word.Это не имеет ничего общего с PHPMailer, это обычная проблема, связанная с вводом, которого коснулся Word.

Единственное, что вы делаете неправильно, - это использование PHPMailer 5.x;текущая версия 6.x.

...