1

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

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

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

当我尝试使用 PHP 解码该字符串时,我不能完全正确,ć 总是回来搞砸了。

我已经尝试过 imap_utf8、imap_mime_header_decode 和其他一些我不太记得的东西。他们要么根本不返回任何东西,要么像我之前提到的那样搞砸了 ć。

解码这个的正确方法是什么?

4

3 回答 3

2

imap_utf8并且imap_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 上的重音在某些设置中可能显得不合适。

于 2013-06-19T09:01:05.953 回答
1

这是您做错的事情:您的 HTML(由 PHP 生成)不是 UTF-8 编码的。因此,即使它返回重音 c,页面也无法正确显示。

要修复它,请将其添加到您的<head>标签中:

<meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
于 2013-06-20T05:43:26.470 回答
0

函数 mb_decode_mimeheader() 解决了这个问题

            "fromName" => (isset($fromInfo->personal))
                ? mb_decode_mimeheader( $fromInfo->personal) : "",
于 2015-01-19T17:01:02.240 回答