如何解码收到的电子邮件的主题行的UTF8字符集

abh*_*xit 3 php

在PHP中使用IMAP电子邮件标头时,我遇到了与主题行编码相关的问题.当我尝试mb_decode_mimeheader(根据重复的问题)然后我没有得到理想的结果:

$subject = "=?UTF-8?Q?=e2=99=a3?= Your winning day =?UTF-8?Q?=e2=99=a3?=";
echo mb_decode_mimeheader($subject);
Run Code Online (Sandbox Code Playgroud)

输出:

? Your winning day ?
Run Code Online (Sandbox Code Playgroud)

dec*_*eze 10

要在注释中修复示例:

mb_internal_encoding('UTF-8');
$subject = "=?UTF-8?Q?=e2=99=a3?= Your winning day =?UTF-8?Q?=e2=99=a3?=";
echo mb_decode_mimeheader($subject);
Run Code Online (Sandbox Code Playgroud)

输出"♣你的胜利日♣".

它没有文档mb_internal_encoding影响操作mb_decode_mimeheader,但确实如此.mb_internal_encoding被视为应返回的目标字符集mb_decode_mimeheader.如果将其设置为Latin-1,那么像"♣"这样的字符将无法解码到此目标字符集中并且将失败.

你可能想要寻找imap_utf8一个不那么挑剔的功能.