我有两个问题:
我正在使用TinyMCE编辑器,我想从HTML中删除空标签。我收到错误“DOMDocument :: loadHTML():意外的结束标记:p”当我从TinyMCE编辑器传递文本时,当我直接将文本传递给TinyMCE奇怪时,此错误消失!请参阅以下代码。
如果传递错误的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']);
答案 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>
您可以尝试此操作,但不确定它是否适用于您TinyMCE
,example 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>