php - 使用 PHP 对电子邮件 header 进行 UTF-8 字符编码

标签 php character-encoding mime

我正在尝试将 →(向右箭头, 或 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/

相关文章:

php - 菜单和子菜单的Mysql连接表

php - 当文本区域包含原始 html(输入类型复选框)时,表单中出现 406 Not Acceptable 错误

python - 使用Python修改电子邮件(email.Message)并添加附件

php - 尽管在 header 中发送了 base64,但仍无法识别附件

PHP警告: Use of undefined constant self - assumed 'self'

javascript - 提交表单后重定向页面 - Javascript

haskell - 从 Haskell ByteString 中删除 BOM 的最简单方法

python - 如何判断一个字符串是不是base64

PHP:使用 preg_* 函数获取数组

encoding - 每种语言最常见的编码是什么?