使用DOMDocument从TinyMCE编辑器中删除空元素时出错

时间:2012-11-16 02:28:40

标签: php domdocument

我有两个问题:

  1. 我正在使用TinyMCE编辑器,我想从HTML中删除空标签。我收到错误“DOMDocument :: loadHTML():意外的结束标记:p”当我从TinyMCE编辑器传递文本时,当我直接将文本传递给TinyMCE奇怪时,此错误消失!请参阅以下代码。

  2. 如果传递错误的HTML,如何防止来自DomDocument的警告? <strong>Bold Item </b></strong>

  3. 这是一个示例文本

    <p style="text-align: justify;"> </p>
    <p>blah blah blah <strong></strong>.</p>
    <p style="text-align: justify;"> </p>
    <p>paragraph three!!.</p>
    

    我的功能

    function remove_empty_tags ($text) {
        $dom = new DOMDocument;
        $dom->loadHTML($text);
    
        // fetch all the wanted nodes
        $xp = new DOMXPath($dom);
        foreach($xp->query('//*[not(node() or self::br) or normalize-space() = ""]') as $node) {
            $node->parentNode->removeChild($node);
        }
    
        // output the cleaned markup
        return $dom->saveXml($dom->getElementsByTagName('body')->item(0) );
     }
    
     echo remove_empty_tags($_POST['mce_editor']);
    

1 个答案:

答案 0 :(得分:1)

error_reporting(0)

中使用以下功能
function remove_empty_tags ($text) {
    error_reporting(0); // added
    $dom = new DOMDocument;
    $dom->loadHTML($text);
    $xp = new DOMXPath($dom);
    foreach($xp->query('//*[not(node() or self::br) or normalize-space() = ""]') as $node) {
        $node->parentNode->removeChild($node);
    }
    return $dom->saveXml($dom->getElementsByTagName('body')->item(0) );
}
echo remove_empty_tags("<p>blah blah blah <strong><i></strong>.<em><span></em></span></p>");

我得到以下结果

<p>blah blah blah .</p>

您可以尝试此操作,但不确定它是否适用于您TinyMCEexample here

<强>更新 还有另一种方法使用simplexml_import_dom来修复严重嵌套的标签

error_reporting(0);
$text = "<p>blah blah blah <strong><i></strong>.<em><span></em></span></p>";
$dom = new DOMDocument();
$dom->loadHTML($text);
$repaired = simplexml_import_dom($dom)->asXML();
echo $repaired;

给了我以下结果

<p>blah blah blah <strong><i></i></strong><i>.<em><span></span></em></i></p>