比如我的dom较为复杂
<div class="i_curr_content" style="DISPLAY: block">  //这个div没有闭合
<h3><a class="green" href="">8种超级抗压食品,吃掉压力!</a></h3><p>&nbsp;</p><div style="page-break-after: always;"><span style="display:none">&nbsp;</span></div><p>众所周知,过大的压力会破坏我们的饮食习惯,2112132123</p><div style="page-break-after: always;"><span style="display:none">&nbsp;</span></div>请问 php或者jquery如何能查出这样没有闭合的html元素,并补上这个闭合元素</div>?

解决方案 »

  1.   

    用 DOMDocument::loadHTML 读入,在用 DOMDocument::saveHTML 写出
    就自动补全了,但需要注意的是:html 文档中一定要有 <meta http-equiv="Content-Type" content="text/html; charset=???"> 标记,如果没有则自己加上
    比如你的这段(假定是 gbk 的)$s =<<< HTML
    <div class="i_curr_content" style="DISPLAY: block">  //这个div没有闭合
    <h3><a class="green" href="">8种超级抗压食品,吃掉压力!</a></h3><p> </p><div style="page-break-after: always;"><span style="display:none"> </span></div><p>众所周知,过大的压力会破坏我们的饮食习惯,2112132123</p><div style="page-break-after: always;"><span style="display:none"> </span></div>
    HTML;
    $s = '<meta http-equiv="Content-Type" content="text/html; charset=gbk">'.$s;$doc = new DOMDocument;
    $doc->loadHTML($s);
    echo $doc->saveHTML();
    将输出
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
    <html><head><meta http-equiv="Content-Type" content="text/html; charset=gbk"><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body>
    <div class="i_curr_content" style="DISPLAY: block">  //这个div没有闭合
    <h3><a class="green" href="">8种超级抗压食品,吃掉压力!</a></h3><p>&#160;</p><div style="page-break-after: always;"><span style="display:none">&#160;</span></div><p>众所周知,过大的压力会破坏我们的饮食习惯,2112132123</p><div style="page-break-after: always;"><span style="display:none">&#160;</span></div></div></body></html>套红的都是新加的