解码UTF-8编码头

时间:2013-06-19 06:22:46

标签: php utf-8 email-headers

我正在使用PHP imap从收件箱中读取电子邮件。它从标题中提取一些信息。其中一个标题如下:

X-My-Custom-Header:=?UTF-8?B?RXVnZW4gQmFiacSH?=

该编码字符串的原始值是EugenBabić。

当我尝试使用PHP解码该字符串时,我无法理解它,ć总是回来搞砸了。

我已经尝试了imap_utf8,imap_mime_header_decode以及其他一些我无法回忆的内容。他们要么根本不归还任何东西,要么就像我之前提到的那样弄乱了ć。

解码此问题的正确方法是什么?

3 个答案:

答案 0 :(得分:2)

imap_utf8imap_mime_header_decode工作正常;还有iconv_mime_decode

php > echo imap_utf8('X-My-Custom-Header: =?UTF-8?B?RXVnZW4gQmFiacSH?='), "\n";
X-My-Custom-Header: Eugen Babić

php > list($k,$v) = imap_mime_header_decode('X-My-Custom-Header: =?UTF-8?B?RXVnZW4gQmFiacSH?=');
php > echo $v->text, "\n";
Eugen Babić

php > echo iconv_mime_decode('X-My-Custom-Header: =?UTF-8?B?RXVnZW4gQmFiacSH?=', 0, "utf8"), "\n";
X-My-Custom-Header: Eugen Babić

似乎imap_utf8在NFD中返回其输出,因此在某些设置中c上的重音可能显得不合适。

答案 1 :(得分:1)

这就是你做错了什么:你的HTML(由PHP生成)不是UTF-8编码的。因此即使它返回重音c,页面也没有正确显示它。

要解决此问题,请在<head>标记中添加:

<meta http-equiv='Content-Type' content='text/html; charset=utf-8'>

答案 2 :(得分:0)

函数mb_decode_mimeheader()解决了问题

            "fromName" => (isset($fromInfo->personal))
                ? mb_decode_mimeheader( $fromInfo->personal) : "",