php simple html dom 乱码,php simple dom html 解析乱码

1. 乱码解决

毫无疑问, 一上来就碰到了乱码问题, 固然我已按文档所述, 所有的字符使用 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生成弹出窗口

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值