2

2 つの質問があります。

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

1 に答える 1

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>

TinyMCEあなたはこれを試すかもしれませんが、それがうまくいくかどうかはわかりませ.

更新: 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>
于 2012-11-16T03:56:25.850 に答える