我正在使用PHP从网页中获取所有“脚本”标记,然后在< / script>之后附加文本。这并不总是有效的HTML。因为它并不总是有效的标记我不能只使用appendchild / replacechild来添加这些信息,除非我误解了replacechild的工作方式。
无论如何,当我做的时候
$script_tags = $doc->getElementsByTagName('script');
$l = $script_tags->length;
for ($i = $l - 1; $i > -1; $i--)
$script_tags_string = $doc->saveXML($script_tags->item($i));
这将“<![CDATA [”和“]]>”围绕脚本标记的内容。我怎么能禁用它?请不要告诉我之后删除它,如果我找不到解决办法,那就是我要做的事。
答案 0 :(得分:3)
我怀疑是否插入了CDATA,因为否则它将是无效的XML。
您是否尝试过使用saveHTML
代替saveXML
?
答案 1 :(得分:0)
我找到了解决这个问题的一种方法:
在回显文档之前,围绕所有脚本标记循环,并使用str_replace“<”,“>”对于某些字符串,请确保仅在脚本标记内使用该字符串。 然后,在变量中使用saveXML()方法,最后使用str_replace将“STRING”替换为“<”或“>”
以下是代码:
<?php
//First loop
foreach($dom->getElementsByTagName('script') as $script){
$script->nodeValue = str_replace("<", "ESCAPE_CHAR_LT", $script->nodeValue);
$script->nodeValue = str_replace(">", "ESCAPE_CHAR_GT", $script->nodeValue);
}
//Obtaining XHTML
$output = $dom->saveXML();
//Seccond replace
$output = str_replace("ESCAPE_CHAR_LT", "<", $output);
$output = str_replace("ESCAPE_CHAR_GT", ">", $output);
//Print document
echo $output;
?>
如您所见,现在您可以自由使用“&lt;” “&gt;” 中在你的脚本中。
希望这有助于某人。