Как остановить PHP Domdocument :: SaveXML от вставки "CDATA"? - PullRequest
3 голосов
/ 14 июля 2011

Я использую 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 ]

3 голосов
/ 14 июля 2011

У меня есть подозрение, что CDATA вставлен, потому что в противном случае это был бы недопустимый XML.

Вы пытались использовать saveHTML вместо saveXML?

0 голосов
/ 21 декабря 2012

Один способ, который я нашел, чтобы исправить это:

Перед отображением документа сделайте цикл вокруг всех тегов сценария и используйте 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;
?>

Как видите, теперь вы можете свободно использовать "<" ">" в своих скриптах.

Надеюсь, это кому-нибудь поможет.

...