【发布时间】:2014-06-24 00:58:20
【问题描述】:
我正在使用 PHP DOMDocument 库来创建一个带有 javascript 值的“脚本”标签元素并将其插入 DOM。
这就是我的工作:
$scriptElement = $doc->createElement('script',$scriptTagVal);
echo $scriptElement->nodeValue;
$someNode->parentNode->insertBefore($scriptElement,$postRttScriptNode);
这符合我的预期,它在“someNode”之前插入一个元素。然而,它做了一些奇怪的事情,它混淆了 & 符号。单与号 (&) 不存在,双与号 (&&) 被购买为单与号。
疯了吗?好吧,我试过这样做:
$scriptElement = $doc->createElement('script','return "undefined" !== typeof b **&&** null !== b ? b.getAttribute("content") : 0');
如果我回显 $scriptElement->nodeValue,
我明白了
return "undefined" !== typeof b **&** null !== b ? b.getAttribute("content") : 0'
我假设这实际上是闻所未闻的,但我尝试使用包含双 & 符号的值创建不同的元素。比如:
$scriptElement = $doc->createElement('p','Why does DOMDocument obfuscate double
ampersands(&&)');
输出到我的浏览器的结果是一个
标签的值:
为什么 DOMDocument 会混淆 double 和号(
也许是特殊字符?无论如何我可以解决这个问题吗?我的意思是,肯定有一种方法可以使用 DOMDocument 在 HTML 中插入 javascript,对吧?
【问题讨论】:
-
因为你需要对其进行编码。这个问题已经回答了很多次了。
-
该值不会被转义。使用 DOMDocument::createTextNode() 创建一个支持转义的文本节点。 php.net/manual/en/domdocument.createelement.php
标签: php obfuscation domdocument