如何阻止PHP Domdocument :: SaveXML插入“CDATA”?

时间:2011-07-13 20:20:08

标签: php javascript dom cdata

我正在使用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 [”和“]]>”围绕脚本标记的内容。我怎么能禁用它?请不要告诉我之后删除它,如果我找不到解决办法,那就是我要做的事。

2 个答案:

答案 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;” 中在你的脚本中。

希望这有助于某人。