PHP读取邮件提取内容时HTML标签被UTF-8字符分割如何正确显示
PHP提取邮件指定标签内容的修复方案
问题根因
你的问题核心是解码顺序错误,且字符串匹配提取HTML内容的容错性极低:
- 邮件传输时的quoted-printable编码会将过长行用
=+换行拆分,你在未完成全局解码前就直接匹配标签,自然会把拆分符、残余标签都匹配进结果 - 自定义字符串截取逻辑无法适配邮件传输过程中变形的HTML标签结构
修复方案
先完成全局解码,再用PHP内置DOM解析器提取内容,完全避免字符串匹配的误差:
// 1. 先对整个邮件正文完成quoted-printable全局解码 $decodedBody = quoted_printable_decode($bodyText); // 2. 转换HTML实体,把< >这类编码还原为正常的< >符号 $decodedBody = htmlspecialchars_decode($decodedBody, ENT_QUOTES); // 3. 统一编码为UTF-8,避免乱码 if (!mb_detect_encoding($decodedBody, 'UTF-8', true)) { $decodedBody = mb_convert_encoding($decodedBody, 'UTF-8', 'GBK, GB2312, ISO-8859-1'); } // 4. 用DOM解析器提取目标节点内容 $dom = new DOMDocument(); // 禁用非标准HTML的解析警告,邮件HTML通常不严格符合规范 libxml_use_internal_errors(true); $dom->loadHTML($decodedBody); libxml_clear_errors(); // 按id查找目标span节点 $targetNode = $dom->getElementById('Sadress_Lname'); $Sadress_Lname = $targetNode ? trim($targetNode->nodeValue) : '';
以上逻辑执行后$Sadress_Lname即可得到纯文本结果Meier,不会附带任何残余标签。
内容的提问来源于stack exchange,提问作者MaxF
相关产品推荐
相关产品推荐

