使用DOMDocument使用JS代码解析HTML

时间:2011-03-20 13:24:34

标签: php html-parsing

我将HTML作为字符串使用,然后我解析它以将所有href链接更改为其他内容。但是,当HTML页面包含一些JS脚本标记,即<script>时,它会被删除!例如,这一行:

<script type="text/javascript" src="/js/jquery.js"></script>

获取更改为:

[removed][removed] 

但是,我想把所有东西都放进去。这是我的功能:

function parse_html_code($code, $code_id){

libxml_use_internal_errors(true);

$xml = new DOMDocument();

$xml->loadHTML($code); 

foreach($xml->getElementsByTagName('a') as $link) {

  $link->setAttribute('href', CLK_BASE."clk.php?i=$code_id&j=" . $link->getAttribute('href'));

}

return $xml->saveHTML();

}

我很感激你的帮助。

1 个答案:

答案 0 :(得分:2)

CodeIgniter的伪XSS“功能”是在DOMDocument查看之前将您的脚本输入编辑。脚本标签和各种其他字符串将被删除,替换为“[删除]”其他否则混乱,没有充分理由。有关完整的令人尴尬的详细信息,请参阅system / libraries / Security.php模块。

要关闭此误导功能,请设置$config['global_xss_filtering']= FALSE。当然,您必须确保您的脚本实际上正确处理字符串转义(例如,当包含在页面中时始终是HTML转义用户输入)。但无论如何你必须这样做; anti-XSS不能解决你的文本处理问题,它只是模糊了它们。

$link->setAttribute('href', CLK_BASE."clk.php?i=$code_id&j=" . $link->getAttribute('href'));

您需要urlencode getAttribute('href')(如果不仅仅是数字或其他内容,则需要$ code_id)。