php dom html5,php – 如何使HTML5与DOMDocument工作?

我试图使用DOMDocument解析HTML代码,做一些改变的东西,然后将其组合到一个我发送到输出的字符串。

但是有一些关于解析的问题,这意味着我发送给DOMDocument并不总是以相同的形式回来:)

这里有一个列表:

>格式化我的文档,不管preserveWhitespace和formatOutput设置(在预格式化文本上丢失空格)

>当我有html5标签,如< header>,< footer>时给我错误等等,但他们可以被压制,所以我可以生活在这里。

>产生不一致的标记 – 例如,如果我添加了< link ... />元素(具有自我关闭标签),在解析/保存HTML之后,输出将为< link ..>

>编码实体,如>来自< style>或< script>标签:body> div变成body& gt DIV

>所有标签都以相同的方式关闭,例如< meta ... />成为< meta ...>< / meta&gt ;;但是这可以用正则表达式修正。 我没有尝试HTML5lib,但是由于性能原因,我更喜欢DOMDocument而不是自定义解析器 更新: 所以就像使用CDATA的Honeymonster一样,修正了loadXML的主要问题。 有没有什么办法可以防止自动关闭所有空的HTML标签,除了某个集合,而不使用正则表达式? 现在我有:

$html = $dom->saveXML($node);

$html = preg_replace_callback('#]*)\s*/>#s', function($matches){

// ignore only these tags

$xhtml_tags = array('br', 'hr', 'input', 'frame', 'img', 'area', 'link', 'col', 'base', 'basefont', 'param' ,'meta');

// if a element that is not in the above list is empty,

// it should close like `` (for eg. empty `

`)

return in_array($matches[1], $xhtml_tags) ? "" : "{$matches[1]}>";

}, $html);

它的作品,但它也将在CDATA内容的替代,我不想要…

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值