Отправляйте электронные письма с международным акцентом и специальными символами - PullRequest
6 голосов
/ 12 ноября 2009

Я отправляю новостную рассылку через PHP mail () на испанском языке, у них есть акценты и специальные символы (которые я собираюсь вставить здесь: á, í, é, ñ ...).

Для HTML-версии письма, я думаю, я решил проблему, напечатав á, é ...

Однако для простой текстовой версии, я полагаю, я не могу их поставить, верно?

Что лучше всего сделать как для HTML, так и для простой текстовой версии? Позже мне, возможно, придется отправлять электронные письма на более сложные языки, такие как иврит или китайский ...

Спасибо!

Ответы [ 3 ]

24 голосов
/ 12 ноября 2009

Вам нужно использовать MIME. Добавьте заголовки почты:

MIME-Version: 1.0
Content-Type: text/plain;charset=utf-8

(Если вы уже используете MIME multipart/alternative для помещения HTML и текста в одно и то же сообщение, вместо этого вы помещаете Content-Type: text/plain;charset=utf-8 в подзаголовки текстовой части.)

Предполагается, что кодировка, в которую вы будете отправлять свои «международные» символы, - UTF-8. Если вы планируете обслуживать несколько стран, UTF-8 является единственным разумным выбором кодировки для использования в вашем приложении, но если вы еще не задумывались об этом, ваш сайт может по умолчанию использовать западноевропейскую кодировку. Прежде чем беспокоиться о них по почте, убедитесь, что такие вещи, как китайские символы, корректно работают на вашем сайте и в базе данных.

Derail: есть места, где отправка почты в UTF-8 не самая эффективная вещь. Я не знаю о Китае, но в Японии все еще есть некоторые отсталые и нелепые почтовые системы (особенно веб-почта), которые не могут справиться с Юникодом и должны вместо этого иметь кодировку для конкретной локали, такую ​​как Shift-JIS. Если вы концентрируетесь на этих рынках, вам часто приходится использовать iconv для создания специально закодированных версий почты. Неприятно.

Теперь, поскольку многие почтовые серверы не могут справляться с не-ASCII-символами в теле письма, вам придется их кодировать. Вы можете выбрать для этого цитату для печати или base64; quoted-printable, как правило, меньше по размеру и более читабелен для контента, который также содержит символы ASCII:

Content-Type: text/plain;charset=utf-8
Content-Transfer-Encoding: quoted-printable

Hello! An a-acute is =C3=A1

Функция для кодирования в этом формате: quoted_printable_encode . Однако вам нужен достаточно современный PHP, чтобы получить эту функцию; если у вас его нет, вы можете вместо этого установить Content-Transfer-Encoding на base64 и использовать base64_encode .

Наконец, если вы хотите включить в заголовки не-ASCII-символы (например, From, To или Subject), существует совершенно другой синтаксис:

Subject: =?utf-8?b?QW4gYS1hY3V0ZSBpcyDDoQ==?=

Где этот QW...== беспорядок в середине - это base64_encode в «A-острый» в UTF-8.

1 голос
/ 12 ноября 2009

Если ваш контент электронной почты закодирован как UTF-8, и вы отправляете письмо как UTF-8, то вам не нужно использовать какую-либо специальную обработку международных символов в вашей части HTML или текста.

1 голос
/ 12 ноября 2009

Символы с ударением, такие как á, í, é, ñ, работают с обычным текстом для большинства настроек кодирования браузера по умолчанию.

Азиатские, такие как китайские иероглифы, обычно оказываются мусором.

Да, рекомендуется использовать обычный текст + HTML.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...