我正在尝试将 →(向右箭头,→
或 unicode 2192 hex)编码到电子邮件主题行中。
当我使用 php 的 mb_encode_mimeheader()
时当我用 Thunderbird 或 Gmail 做同样的事情时,我得到了不同的值(value)。但是当 php 生成的电子邮件到达时,字符没有正确显示。此外,PHP 的 mb_decode_mimeheader()
处理 PHP 的输出,但不解码来自其他电子邮件源的内容。
通过十六进制转储,我计算出箭头的 UTF-8 表示是
<?php
$rarr = "\xe2\x86\x92";
mb_encode_mimeheader($rarr, 'UTF-8'); // =?UTF-8?B?w6LChsKS?=
// whereas Tbird and Gmail produce: =?UTF-8?B?4oaS?=
// and more manually:
'=?UTF-8?B?' . base64_encode($rarr).'?='; // =?UTF-8?B?4oaS?=
PHP 的编码出现在 Thunderbird 和 Gmail 中:–
我对 PHP 的行为完全感到困惑,因为它似乎没有产生标准结果。
如何让 PHP 对 UTF-8 电子邮件 header 值进行编码,以便邮件客户端能够正确解码?
最佳答案
似乎有一个错误忽略了第二个参数,我在添加内部编码时得到了正确的结果:
<?php
$rarr = "\xe2\x86\x92";
mb_internal_encoding( "UTF-8");
echo mb_encode_mimeheader($rarr, 'UTF-8'); //=?UTF-8?B?4oaS?=
但是
<?php
$rarr = "\xe2\x86\x92";
mb_encode_mimeheader($rarr, 'UTF-8'); //=?UTF-8?B?w6LChsKS?=
只需设置内部编码即可:
<?php
$rarr = "\xe2\x86\x92";
mb_internal_encoding( "UTF-8");
echo mb_encode_mimeheader($rarr); //=?UTF-8?B?4oaS?=
关于php - 使用 PHP 对电子邮件 header 进行 UTF-8 字符编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13416051/