阻止 PHP DOM 解码

发布于 2024-12-19 19:44:43 字数 322 浏览 0 评论 0原文

PHP DOM 自动解码。例如 * 在创建 DOMElement 时被解码。有没有办法防止这种情况。一种解决方案是对文本进行预处理,然后对其进行后处理,但这看起来更像是一种黑客攻击。

示例代码:

$domDoc = new \DOMDocument();
$domEl = $domDoc->createElement('foo', 'text with * in it');
$domDoc->appendChild($domEl);
echo $domDoc->saveXML();

PHP DOM automatically decodes. Eg * is decoded when creating a DOMElement. Is there a way to prevent this. One solution is to preprocess the text and afterwords postprocess it but this seems more like a hack.

example code:

$domDoc = new \DOMDocument();
$domEl = $domDoc->createElement('foo', 'text with * in it');
$domDoc->appendChild($domEl);
echo $domDoc->saveXML();

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

我们的影子 2024-12-26 19:44:43

DOMDocument,或者更确切地说,libxml,有一个布尔标志替代实体:

专有。是否替换实体。该属性不是 DOM 规范的一部分,而是特定于 libxml 的。

但是,这不适用于您的 ASCII 实体,因为它们是预定义的。有一个针对 PHP 5.1.4 的错误报告要求此操作,已标记为为“不是错误”,因为

行为正确 - 这些是预定义的实体,substituteEntities 对它们的行为没有影响。有关详细信息,请参阅规范:http://www .w3.org/TR/2004/REC-xml-20040204/#sec-predefined-ent

另请参阅 http://xmlsoft.org/entities.html

请注意,在保存时,libxml2 会在必要时强制转换预定义实体,以防止格式良好问题,并且还将透明地用字符替换这些实体(即,它不会在 DOM 树中生成实体引用元素或调用引用() 在输入中找到它们时的 SAX 回调)。

DOMDocument, or rather libxml, has a boolean flag substituteEntities:

Proprietary. Whether or not to substitute entities. This attribute is not part of the DOM specification and is specific to libxml.

However, this won't work for your ASCII entities because they are predefined. There was a bug report asking for this for PHP 5.1.4, which is marked as "Not A Bug", because

Behavior is correct - These are pre-defined entities and substituteEntities has no effect on the behavior of them. See the specs for more info: http://www.w3.org/TR/2004/REC-xml-20040204/#sec-predefined-ent

Also see http://xmlsoft.org/entities.html

Note that at save time libxml2 enforces the conversion of the predefined entities where necessary to prevent well-formedness problems, and will also transparently replace those with chars (i.e. it will not generate entity reference elements in the DOM tree or call the reference() SAX callback when finding them in the input).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文