如何解码收到的电子邮件主题行的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字符集[重复]的主要内容,如果未能解决你的问题,请参考以下文章