我正在使用PHP imap从收件箱中读取电子邮件。它从标题中提取一些信息。其中一个标题如下:
X-My-Custom-Header:=?UTF-8?B?RXVnZW4gQmFiacSH?=
该编码字符串的原始值是EugenBabić。
当我尝试使用PHP解码该字符串时,我无法理解它,ć总是回来搞砸了。
我已经尝试了imap_utf8,imap_mime_header_decode以及其他一些我无法回忆的内容。他们要么根本不归还任何东西,要么就像我之前提到的那样弄乱了ć。
解码此问题的正确方法是什么?
答案 0 :(得分: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上的重音可能显得不合适。
答案 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) : "",