art*_*bot 4 php mime character-encoding
我正在尝试将→(右箭头→或unicode 2192 hex)编码为电子邮件主题行.
当我使用php时,当我使用mb_encode_mimeheader()Thunderbird或Gmail做同样的事情时,我会得到不同的价值.但是当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?=
Run Code Online (Sandbox Code Playgroud)
PHP的编码在Thunderbird和Gmail中出现为:â
我对PHP的行为感到困惑,因为它似乎没有产生标准结果.
如何让PHP编码UTF-8电子邮件头值,以便邮件客户端正确解码?
似乎有一个忽略第二个参数的错误,当我添加内部编码时,我得到了正确的结果:
<?php
$rarr = "\xe2\x86\x92";
mb_internal_encoding( "UTF-8");
echo mb_encode_mimeheader($rarr, 'UTF-8'); //=?UTF-8?B?4oaS?=
Run Code Online (Sandbox Code Playgroud)
但
<?php
$rarr = "\xe2\x86\x92";
mb_encode_mimeheader($rarr, 'UTF-8'); //=?UTF-8?B?w6LChsKS?=
Run Code Online (Sandbox Code Playgroud)
只需设置内部编码即可:
<?php
$rarr = "\xe2\x86\x92";
mb_internal_encoding( "UTF-8");
echo mb_encode_mimeheader($rarr); //=?UTF-8?B?4oaS?=
Run Code Online (Sandbox Code Playgroud)