首页 > 后端开发 > php教程 > php如何解析email中mime类型的header

php如何解析email中mime类型的header

WBOY
发布: 2016-06-06 20:51:08
原创
1141 人浏览过

email中header的内容如果不是ascii码,就会编码成mime类型的信息。在php中应该如何对这些信息解码?不知道为什么用iconv_mime_decode有些情况下不能正常解码。另外,发现有header中的内容可能有多段mime的编码的内容(=?.+?=)。请教用php是否有标准的解析mime header的方法?

回复内容:

email中header的内容如果不是ascii码,就会编码成mime类型的信息。在php中应该如何对这些信息解码?不知道为什么用iconv_mime_decode有些情况下不能正常解码。另外,发现有header中的内容可能有多段mime的编码的内容(=?.+?=)。请教用php是否有标准的解析mime header的方法?

标准的解析方法... 内置函数应该是没有...

但是有个第三方库你可以使用下...

php-mime-mail-parser

写了个解析方法,测试基本通过。

function parse_mime($pending, $to_charset = 'UTF-8') {
    $start = strpos($pending, '=?');
    if ($start === false) {
        return $pending;
    }
    $end = strpos($pending, '?=', $start + 2);
    if ($end === false) {
        return $pending;
    }
    while ($start !== false && $end !== false) {
        $segment = substr($pending, $start, $end - $start + 2);
        $charset_end = strpos($segment, '?', 2);
        $charset = substr($segment, 2, $charset_end - 2);
        $encType = strtoupper($segment{$charset_end + 1});
        $encoded_text = substr($segment, $charset_end + 3, strlen($segment) - $charset_end -
            5);
        switch ($encType) {
            case 'Q':
                $encoded_text = str_replace('_', ' ', $encoded_text);
                $text = quoted_printable_decode($encoded_text);
                break;
            case 'B':
                $text = base64_decode($encoded_text);
                break;
        }
        $text = mb_convert_encoding($text, $to_charset, $charset);
        $pending = str_replace($segment, $text, $pending);
        // next encoded-word.
        $start = strpos($pending, '=?');
        $end = strpos($pending, '?=', $start + 2);
    }
    return $pending;
}
登录后复制
相关标签:
来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板