2017-01-23 38 views
1

我试图用PHP解析一些html以添加一些节点,但是DOMDocument-> saveHTML的输出没有像预期的那样工作,原因是href属性是编码。DOMDocument-> saveHTML与预期的href属性无法正常工作

这是为了检查错误输出的简单代码:

$html = "<a href='javascript:console.log(\"klk\");'>click here</a>"; 
$doc = new DOMDocument(); 
$doc->loadHTML($html); 
echo $html . "\n"; 
echo "-----------------\n"; 
echo $doc->saveHTML($doc->getElementsByTagName('a')[0]) . "\n"; 

,这里是输出:

<a href='javascript:console.log("klk");'>click here</a> 
----------------- 
<a href="javascript:console.log(%22klk%22);">click here</a> 

正如你可以看到出问题时将href属性。

任何关于如何解决这个问题的想法?

测试/ Play网址:http://ideone.com/TsDhI3

回答

2

尝试以正确的格式编写HTML,与值用双引号,而不是单一的人分隔的属性,所以他们没有得到编码。 Javascript可以识别由单引号分隔的字符串。

下面是一个例子:

$html = '<a href="javascript:console.log(\'klk\');">click here</a>'; 
$doc = new DOMDocument(); 
$doc->loadHTML($html); 
echo $html . "\n"; 
echo "-----------------\n"; 
echo $doc->saveHTML($doc->getElementsByTagName('a')[0]) . "\n"; 

这里的工作版本 - http://ideone.com/DjEyUX

+0

这只是一个例子,问题是,HTML来自很多来源,我不能保修怎么HTML被创建... – xabi

+1

DOMDocument()功能是为正确的HTML构建的。如果您的应用程序从不受控制的源发出乱码的HTML输入,则应在使用它之前使用实用程序对其进行清理。此库为http://htmlpurifier.org/docs或http://php.net /manual/en/book.tidy.php – motanelu

相关问题