如何在我的UTF-8编码页面上正确显示UTF编码字符?

3

我正在检索邮件,其中一些邮件包含UTF编码的文本。然而,即使我的页面已经编码为UTF-8,在一些地方当我尝试输出UTF文本时,我会得到一些奇怪的字符,例如:

=?utf-8?B?Rlc6INqp24zYpyDYotm+INin2LMg2YXYs9qp2LHYp9uB2bkg2qnbjCDZhtmC?= 
=?utf-8?B?2YQg2qnYsdiz2qnYqtuSINuB24zaug==?=

而在同一页的其他区域,它能够正常显示。这是怎么回事?

2个回答

6

这不是“有趣的字符”,而是合法的ASCII字符。只是该字符串进行了MIME编码以进行传输,因此您需要将其通过mb_decode_mimeheader进行转换。


1
@Ali 好问题。我认为如果字符串没有进行MIME编码,mb_decode_mimeheader将按原样传递它,因此在任何字符串上使用它应该是安全的。对于电子邮件正文,您应该解析头部以查明它以什么传输编码方式发送。 - deceze
运行mime解码器不会改变正常字符串,然而在我的情况下,原始编码的字符串现在显示为一系列问号。 - Ali
@Ali,我觉得你快要深入其中了。如果你需要一个更复杂的邮件解析器,我强烈推荐使用一个已有的库,该库涵盖了所有的边界情况。正确的邮件解析是一个非常复杂的任务。PHP有一个名为Mailparse的PECL扩展库:http://www.php.net/manual/en/book.mailparse.php - deceze
我觉得我已经陷入困境了:S - 实际上,我正在使用Zend框架构建电子邮件界面。而现在似乎发现该框架在这方面存在某些严重的限制。 - Ali

1
你可能会看到未解码的电子邮件头:=?是起始分隔符,utf-8表示文本采用utf-8编码,B表示base-64编码。?=是结束分隔符。因此,对问号之间的部分进行base64_decode()解码,即可获取内容。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接