問題点は次のとおりです。HTMLフラグメントをサーバー側に保存するWebページがあります。問題は、PHPでDOMDocumentパーサを起動し、指定された要素にカスタム属性を追加してHTMLをファイルとして保存すると、実際には有効ではないHTML、本文、およびその他の不要な要素が文字通り追加されるという点ですそのフラグメントはDOMモデル内に挿入されるHTMLフラグメントとしてブラウザに戻ってくるため、無効になります(ネストされたHTML/BODYを持つことはできません)。ここに私のコードの簡単な例です:完全なDOMモデルではなく、HTMLフラグメントとして保存するには
$html="<div><magic></magic>
<video controls></video>
<a href='http://example.com'>Example</a><br>
<a href='http://google.com'>Google</a><br></div>
";
$dom = new DOMDocument();
$dom->loadHTML($html);
$html=$dom->C14N();
echo $html;
しかし、それは示しています
<html>
<body>
<div>
<magic></magic>
<video controls=""></video>
<a href="http://example.com">Example</a>
<br></br>
<a href="http://google.com">Google</a>
<br></br>
</div>
</body>
</html>
私は断片化されたHTMLを保存する方法は?私は$ dom-> C14N()を思いついたが、それでもhtmlとbodyタグが追加されている。それはまた</br>
を追加しますが、それは大きな問題ではありません。
この時点で、私はpreg_replaceにhtmlタグとbodyタグを削除することに頼っていますが、フラグメントとして保存する方法があればいいと思います。
単純な 'save'メソッドを試しましたか? – Justinas
'$ dom-> loadHTML($ html、LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);と' $ html = $ dom-> saveHTML(); 'を使用してください。 –
@WiktorStribiżewそれが問題を解決しました。私の質問への答えとしてそれを受け入れることができるように答えてください。ありがとう。 – netrox