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

DOMDocument->saveHTML isn't working as expected with href attributes

我试图用 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 属性出了点问题。

知道如何解决这个问题吗?

Test/play url: http://ideone.com/TsDhI3

尝试以正确的格式编写 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