我正在尝试使用DOMDocument解析HTML代码,对其进行更改,然后将其组合回我发送到输出的字符串 .
但是有一些关于解析的问题,这意味着我发送给DOMDocument的内容并不总是以相同的形式返回:)
这是一个清单:
格式化我的文档,无论 preserveWhitespace 和 formatOutput 设置如何(在预先格式化的文本上丢失空格)
当我拥有像 , 等html5标签时
给我错误 . 但是他们可以被压制,所以我可以忍受这个 .
产生不一致的标记 - 例如,如果我添加 元素(带有自闭标记),解析/ saveHTML后输出将为
对来自
所有标签都以相同的方式关闭,例如 变为 ;但这可以用正则表达式修复 .
我没有尝试HTML5lib,但出于性能原因,我更喜欢DOMDocument而不是自定义解析器
更新:
就像使用CDATA提到的Honeymonster一样,修复了loadXML的主要问题 .
有没有什么方法可以防止除了某个集合之外的所有空HTML标签的自动关闭,而不使用正则表达式?
现在我有:
$html = $dom->saveXML($node);
$html = preg_replace_callback('#<(\w+)([^>]*)\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]}{$matches[2]} />" : "<{$matches[1]}{$matches[2]}>{$matches[1]}>";
}, $html);
哪个有效,但它也会替换CDATA内容,我不想要......