&...; 是 HTML/XML 实体,与电子邮件无关。您将无法可靠地将这些转换为所需的符号,我会认为任何确实将它们转换为错误的结果。
此外,没有“ASCII è”这样的东西。 “ASCII”不是真正的编码,“扩展 ASCII”是对 ISO8859 和/或 Microsoft cp12XX 编码的误用。如果您的客户不能支持除了无重音的英文文本之外的任何内容,那么您就只能使用这些了。
也就是说,虽然所有电子邮件标头必须根据规范是 7 位安全的“ASCII”文本,但 提供了对包含文本的标头进行编码的规定其他字符集。 UTF、ISO、MS CP等
function encode_subject($input, $charset, $method='B') {
switch($method) {
case 'B':
$encoded = base64_encode($input);
break;
case 'Q':
$encoded = quoted_printable_encode($input);
break;
default:
throw new Exception('Unknonw encoding method: ' . $method);
}
return sprintf('=?%s?%s?%s?=', $charset, $method, $encoded);
}
$input = 'Welcome to the fancy è club!'; // utf8
$utf8 = $input;
$iso8859_1 = mb_convert_encoding($input, 'iso-8859-1', 'utf-8');
$cp1252 = mb_convert_encoding($input, 'cp1252', 'utf-8');
var_dump(
$utf8,
encode_subject($utf8, 'utf-8', 'B'),
encode_subject($utf8, 'utf-8', 'Q'),
$iso8859_1,
encode_subject($iso8859_1, 'iso-8859-1', 'B'),
encode_subject($iso8859_1, 'iso-8859-1', 'Q'),
$cp1252,
encode_subject($cp1252, 'cp1252', 'B'),
encode_subject($cp1252, 'cp1252', 'Q')
);
输出:
string(29) "Welcome to the fancy è club!"
string(52) "=?utf-8?B?V2VsY29tZSB0byB0aGUgZmFuY3kgw6ggY2x1YiE=?="
string(45) "=?utf-8?Q?Welcome to the fancy =C3=A8 club!?="
string(28) "Welcome to the fancy � club!"
string(57) "=?iso-8859-1?B?V2VsY29tZSB0byB0aGUgZmFuY3kg6CBjbHViIQ==?="
string(47) "=?iso-8859-1?Q?Welcome to the fancy =E8 club!?="
string(28) "Welcome to the fancy � club!"
string(53) "=?cp1252?B?V2VsY29tZSB0byB0aGUgZmFuY3kg6CBjbHViIQ==?="
string(43) "=?cp1252?Q?Welcome to the fancy =E8 club!?="
因此,无论您发送电子邮件的字符集是什么,都可以使用它来编码主题。如果您的收件人使用的旧邮件客户端无法正确解码他们可能说的语言的文本,那么他们有更大的问题与您无关。
热卖
UTF-8 无处不在,适用于一切。 2020 年不支持 UTF8 的任何东西都是有缺陷的,而不是您的问题。除非您的目标市场是从 2004 年开始使用 Windows ME 或 Palm Pilot 的用户,否则请使用 UTF-8。