PHP Dom文档不要修复标记

时间:2014-06-03 21:28:40

标签: php domdocument

如何阻止DOMDocument自己的想法?

$dom = new DOMDocument();
$validHtml = '<body><a href="{{ var name=test method=toString }}">Test</a></body>';
$dom->loadHTML($validHtml);

加载后,锚属性被编码。我希望它不要这样做。

$body = $dom->saveHTML();
var_dump($body);
//<body><a href="%7B%7B%20var%20name=test%20method=toString%20%7D%7D">Test</a></body>

我意识到这已经被覆盖过了,但是我所看到的每一个,它都是无用的Ninja代码。任何帮助赞赏。

1 个答案:

答案 0 :(得分:0)

以下是我修复自己问题的方法。基本上,我决定去除标记中的所有标记,并放置我以后可以用来放回来的持有者:

    $validHtml = '<body><a href="{{ var name=test method=toString }}">Test</a></body>';

    $matches = array();
    preg_match_all('/{{[^}]+}}/',$validHtml, $matches);

    $matches = $matches[0];
    if (count($matches)>0){
       foreach ($matches as $i=>$match){
           $validHtml = str_replace($match, "<!--INDEX-$i-->", $validHtml);
       }
    }
    $dom = new DOMDocument();  
    $dom->loadHTML($validHtml);

... //do processing on the loaded dom

在操纵dom之后,我把所有的比赛放回去了:

    $validHtml = $dom->saveHTML();

    if (count($matches)>0){
        foreach ($matches as $i=>$match){
            $validHtml = str_replace(array("<!--INDEX-$i-->", "&lt;!--INDEX-$i--&gt;"), $match, $validHtml);
        }
    }