【问题标题】:Error removing empty elements from TinyMCE editor using DOMDocument使用 DOMDocument 从 TinyMCE 编辑器中删除空元素时出错
【发布时间】:2012-11-16 02:28:40
【问题描述】:

我有两个问题:

  1. 我正在使用 TinyMCE 编辑器,我想从 HTML 中删除空标签。当我从 TinyMCE 编辑器传递文本时,我收到错误“DOMDocument::loadHTML(): Unexpected end tag : p”,当我直接将文本传递给 TinyMCE 时,这个错误消失了!请看下面的代码。

  2. 当传递不正确的 HTML 时,如何防止来自 DomDocument 的警告? <strong>Bold Item </b></strong>?

这是一个示例文本

<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']);

【问题讨论】:

    标签: php domdocument


    【解决方案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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-22
      • 2022-11-18
      • 2019-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多