我使用PHP语言的DOMDocument来解析和规范化用户提交的超文本标记语言,使用loadHTML
方法来解析内容,然后通过saveHTML
获得格式良好的结果
$dom= new DOMDocument();
$dom->loadHTML('<div><p>Hello World');
$well_formed= $dom->saveHTML();
echo($well_formed);
这很好地解析了片段并添加了适当的结束标记。问题是我也得到了一堆我不想要的标签,比如<!DOCTYPE>
、<html>
、<head>
和<body>
。我知道每个格式良好的HTML文档都需要这些标记,但是我正在规范化的HTML片段将被插入到现有的有效文档中。
发布于 2010-02-27 08:52:35
问题的快速解决方案是使用xPath表达式获取正文。
$dom= new DOMDocument();
$dom->loadHTML('<div><p>Hello World');
$xpath = new DOMXPath($dom);
$body = $xpath->query('/html/body');
echo($dom->saveXml($body->item(0)));
这里有一个警告。有时,当loadHTML遇到格式错误的文档时,它会抛出一个警告。如果你正在解析这类超文本标记语言文档,你需要找到一个better html parser自链接警告。
发布于 2010-03-12 18:01:19
面对同样的问题,我在DOMDocument周围创建了一个名为SmartDOMDocument的包装器,以克服这一点和其他一些缺点(例如编码问题)。
发布于 2014-01-04 09:05:34
这篇文章取自另一篇文章,非常适合我的使用:
$layout = preg_replace('~<(?:!DOCTYPE|/?(?:html|head|body))[^>]*>\s*~i', '', $layout);
https://stackoverflow.com/questions/2345670
复制相似问题