毫无疑问, 一上来就碰到了乱码问题, 固然我已按文档所述, 所有的字符使用 utf-8 编码:
$html = '你好
'; $dom = new domdocument(); @$dom->loadhtml($html); echo $dom->documentelement->nodevalue;
可是, 若是改成:
$html = '你好
'; $dom = new domdocument(); @$dom->loadxml($html); echo $dom->documentelement->nodevalue;
就没有问题. 后来才发现, 本来 loadhtml 会依靠 html 中的声明 meta 标签. 假如没有这样的标签, 就看成 iso-8859-1 字符集, 所以乱码. 要解决, 就给字符串加上如许的一个标签在头部:
$meta = ''; @$dom->loadhtml($meta . $html);
2. 递归
html/xml 是递归布局, 所以必然会递归遍历:
function _pretty_html_node($node){ // 递归终止前提 // 1. xml_text_node // 2. xml_element_node // 3. 没有子节点 foreach($node->childnodes as $n){ $child_text .= _pretty_html_node($n); } // 然后对分歧的标签做不同的处置 switch($tag){ case 'a': $href = $node->getattribute('href'); $text .= $child_text; ... } return $text; }
3. 转义字符处置惩罚
对文本节点, 其 nodevalue 要颠末 htmlspeciachars() 转义. 由于读取 html/xml 时, 会对文本进行反转义, 比如 > 在内存中已经是 >了.
下载源码:pretty_html.php
related posts:
c# 版的 simplexml自架设apache办事器过程当中的网页乱码问题if-else对优化代码冗余度的反感化wordpress分页代码用javascript生成弹出窗口 以上就介绍了php simple dom html 解析乱码,包括了方面的内容,希望对php教程有兴趣的朋友有所帮助。