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

Posted

技术标签:

【中文标题】如何解码收到的电子邮件主题行的UTF8字符集[重复]【英文标题】:how to decode UTF8 charset of a subject line of a received email [duplicate] 【发布时间】:2014-05-01 14:54:43 【问题描述】:

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);

输出:

? Your winning day ?

【问题讨论】:

@peter 当我尝试使用 mb_decode_mimeheader 时,我没有得到想要的结果代码我使用的是:$subject="=?UTF-8?Q?=e2=99=a3?= 你的胜利天 =?UTF-8?Q?=e2=99=a3?="; echo $sub=mb_decode_mimeheader($subject);输出:?你的胜利日? 投票重新打开,链接副本并没有真正解决这个问题。 @abhinav 请下次将您的代码发布到问题中,以使问题更加具体。 请再更新两个数据点,以便问题具有全部 3 个 - 预期输出,使用重复接受的答案输出,使用重复的另一个答案输出。 使用 Python OP 字符串进行测试的结果为 U+2663(黑色空格套装)+ 文本 + 相同的 unicode 字符,即♣Your winning day♣。我想 OP 问题缺少 unicode。也许所有 OP 需要 echo utf8_encode(mb_....); 【参考方案1】:

修复 cmets 中的示例:

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);

输出“♣ 你的胜利日 ♣”。

mb_internal_encoding 会影响mb_decode_mimeheader 的操作并没有记录,但确实如此。 mb_internal_encoding 被视为应从 mb_decode_mimeheader 返回的目标字符集。如果设置为 Latin-1,则“♣”之类的字符无法解码为此目标字符集,并且会失败。

您可能想查看imap_utf8 以获得不那么挑剔的功能。

【讨论】:

当我试图执行你提供的代码的 sn-p 时,我正在退出:♣ 你的胜利日♣有什么办法可以克服这个问题。请它可能是低级别向你提问,但我对 IMAP 有点陌生,所以我面临这些麻烦。在此先感谢您的帮助和指导。但我仍在寻找一种方法来满足我的要求。 是的@abhinav,你是对的,我也得到了相同的输出,因为你的输出是“♣ 你的胜利日♣”。尽管我也尝试了相同的代码并获得了与 abhinav 提到的相同的输出。几天前我也遇到了同样的问题。 @abhinav 这意味着一切正常,但您没有将结果显示为 UTF-8。你在哪里展示这个?另见kunststube.net/frontback。 我只是想使用xampp在浏览器上显示它,是否需要在php ini文件中修改任何设置。 嘿,deceze,你是摇滚明星兄弟,现在你的链接 kunststube.net/frontback 解决了我的问题,非常感谢。除了你的代码的 sn-p,我添加了 header('Content-Type : 文本/html; charset=utf-8');有了它就可以正常工作。

以上是关于如何解码收到的电子邮件主题行的UTF8字符集[重复]的主要内容,如果未能解决你的问题,请参考以下文章

解码 UTF8 电子邮件标头

算法在数据语料库中检测重复/相似的字符串——比如电子邮件主题,在 Python [重复]

越南电子邮件主题编码?

如何在 PHP 中使用其编码类型解码邮件标头字符串

JavaScript如何对后台utf8编码的字符串解码?

PHP Unicode 电子邮件