php如何解析email中mime类型的header
程序员文章站
2022-06-14 18:53:23
...
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; }
推荐阅读
-
如何在ASP.NET的web.config配置文件中添加MIME类型
-
解析php框架codeigniter中如何使用框架的session
-
解析如何在PHP下载文件名中解决乱码的问题
-
php中利用header设置content-type和常见文件类型的content-type
-
解析如何屏蔽php中的phpinfo()函数
-
解析如何去掉CodeIgniter URL中的index.php
-
解析php框架codeigniter中如何使用框架的session_php技巧
-
解析php框架codeigniter中如何使用框架的session_PHP教程
-
解析如何修改php myadmin中的默认登陆超时时间_PHP教程
-
php中header设置常见文件类型的content-type