皆さん、私は、HTML文字列を解析し、任意のp
タグの周りCDATA
タグを追加しようとしているので、<p>something</p>
は<p><!CDATA[<p>blah</p>]]</p>
になってしまうでしょう。これは私がその点に欲しいものを行います。のDOMDocumentとUL tages
$html_str = '<p><strong>blah blah blah</strong></p><ul><li>blah blah blah</li><li>blah blah blah</li><li>blah blah blah</li></ul><p>blah blah blah</p>';
$domdoc = new DOMDocument();
$domdoc->loadHTML($html_str);
foreach($domdoc->getElementsByTagName("p") as $pnode) {
$cdata = $domdoc->createCDATASection('<p>'. $pnode->nodeValue .'</p>');
$pnode->replaceChild($cdata, $pnode->childNodes->item(0));
}
echo $domdoc->saveXML();
問題があっp
タグ内にない文字列の一部ul
タグがあると私はそれらと同じことを行う必要があります。それらは、<p><!CDATA[<ul>blah</ul>]]</p>
のように、p
タグ内にCDATA
で囲む必要があります。
ul
の前に
p
タグを追加してから、ちょうどのために、
CDATA
内にあるように、すべての
p
のタグを取得するために、第2パスで上記と同じを使用することができることを期待していた
例:明らかに
$html_str = '<p><strong>blah blah blah</strong></p><ul><li>blah blah blah</li><li>blah blah blah</li><li>blah blah blah</li></ul><p>blah blah blah</p>';
$domdoc = new DOMDocument();
$domdoc->loadHTML($html_str);
foreach($domdoc->getElementsByTagName("ul") as $ulnode) {
$cdata = $domdoc->createElement("p",$ulnode->nodeValue);
$domdoc->replaceChild($cdata,$ulnode);
}
foreach($domdoc->getElementsByTagName("p") as $pnode) {
$cdata = $domdoc->createCDATASection('<p>'. $pnode->nodeValue .'</p>');
$pnode->replaceChild($cdata, $pnode->childNodes->item(0));
}
echo $domdoc->saveXML();
、これは動作しませんでした、私はli
項目の内容だけになってしまいました。私はそのような2つのパスを行うことはできませんか?それとも、ul
は子供や何かを持つ親ですか?
は私がで終わるしようとしていることはこれです:
<p><!CDATA[<p><strong>blah blah blah</strong></p>]]></p>
<p><!CDATA[<ul><li>blah blah blah</li><li>blah blah blah</li><li>blah blah blah</li></ul>]]></p>
<p><!CDATA[<p>blah blah blah</p>]]></p>
私はCDATAタグにあまり慣れていませんが、あなたには閉じ括弧があまりにも多い( ']')ように見えます。 – freginold
'p'の中に 'ul'タグがいくつかあるかもしれませんか? – revo