我试图解析一个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();
的问题是有一些ul
标签字符串中不属于内p
标签,我需要做那些同样的事情;他们需要在p
标记内被CDATA
包围,如<p><!CDATA[<ul>blah</ul>]]</p>
。
我希望我可以去通过串第一,在任何ul
前加上一个p
标签,然后只用上述相同的上第二遍把所有的p
标签是一个CDATA
内时,例如:
$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