DOMDocument-> saveHTML无法按预期使用href属性

时间:2017-01-23 13:11:01

标签: php escaping domdocument

我正在尝试用PHP解析一些html以添加一些节点,但是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属性出了问题。

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

测试/播放网址:http://ideone.com/TsDhI3

1 个答案:

答案 0 :(得分: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