[英]Unwanted paragraph when saving html in DOM
使用 DOM 元素操作並使用$dom->saveHTML();
在我的輸出中獲得額外的空段落,這是我的代碼:
PHP:
$dom_str = "Phasellus eu arcu vest, <mark data-tooltip='tooltip'></mark> sodales dui."
$dom = new DOMDocument;
$dom->loadHTML($dom_str);
$dom_items = $dom->getElementsByTagName('mark'); // retrieving elements by tag
$dom_app = $dom->createElement('amp-script');
$dom_span = $dom->createElement('span');
$dom_app->appendChild($dom_span);
$mark_item = $dom_items->item(0);
$mark_item->appendChild($dom_app); // appending additional HTML
$output_dom = $dom->saveHTML(); // saving DOM
$output .= '<div><p>'. $output_dom .'</p></div>';
return $output;
輸出:
<div>
<p></p> <! –– Unwanted paragraph ––>
<p>Phasellus eu arcu vest, <mark><amp-script><span></span></amp-script></mark> sodales dui</p>
</div>
已經試過$dom->loadHTML($dom_str, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
但空段落仍然存在。
當使用部分 HTML 片段而不是完整的 HTML 文檔調用loadHTML
時,將LIBXML_HTML_NOIMPLIED
和LIBXML_HTML_NODEFDTD
OR'd 一起作為第二個參數傳遞可能是個好主意,否則DOMDocument
將開始為您“修復”事物:
$dom->loadHTML($dom_str, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
我還必須添加libxml_use_internal_errors(true);
使mark
標簽起作用
通過這兩個更改,並在最后忽略您的字符串連接,我得到了這個:
$dom_str = "Phasellus eu arcu vest, <mark data-tooltip='tooltip'></mark> sodales dui.";
$dom = new DOMDocument;
libxml_use_internal_errors(true); // Enabled HTML5 tags
$dom->loadHTML($dom_str, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD); // Don't automatically create html/body/doctype tags
$dom_items = $dom->getElementsByTagName('mark'); // retrieving elements by tag
$dom_app = $dom->createElement('amp-script');
$dom_span = $dom->createElement('span');
$dom_app->appendChild($dom_span);
$mark_item = $dom_items->item(0);
$mark_item->appendChild($dom_app); // appending additional HTML
echo $dom->saveHTML(); // saving DOM
這將輸出以下內容:
<p>Phasellus eu arcu vest, <mark data-tooltip="tooltip"><amp-script><span></span></amp-script></mark> sodales dui.</p>
演示: https : //3v4l.org/KRDKS
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.