LIBXML_NOENT 是做什么的(为什么不叫 LIBXML_ENT)?

2024-07-03

在 PHP 中,可以将可选参数传递给各种 XML 解析器,其中之一是LIBXML_NOENT. The 文档 https://secure.php.net/manual/en/libxml.constants.php对此有这样的说法:

LIBXML_NOENT(整数)
替代实体

Substitute entities信息不是很丰富(什么实体?它们何时被替换?)。但我认为可以公平地假设NOENT是缩写NO_ENTITIES or NO_EXTERNAL_ENTITIES,所以对我来说,这个标志禁用(外部)实体的解析似乎是一个合理的假设。

但这确实是not案子:

$xml = '<!DOCTYPE root [<!ENTITY c PUBLIC "bar" "/etc/passwd">]>
<test>&c;</test>';
$dom = new DOMDocument();
$dom->loadXML($xml, LIBXML_NOENT);
echo $dom->textContent;

结果是 /etc/passwd 的内容被回显。如果没有LIBXML_NOENT论证事实并非如此。

对于非外部实体,该标志似乎没有任何效果。例子:

$xml = '<!DOCTYPE root [<!ENTITY c "TEST">]>
<test>&c;</test>';
$dom = new DOMDocument();
$dom->loadXML($xml);
echo $dom->textContent;

这段代码的结果是“TEST”,有或没有LIBXML_NOENT.

该标志似乎对预定义实体没有任何影响,例如&lt;.

所以我的问题是:

  • 具体是做什么的LIBXML_NOENT标志吗?
  • 为什么叫它LIBXML_NOENT?它是什么缩写,不会LIBXML_ENT or LIBXML_PARSE_EXTERNAL_ENTITIES更适合吗?
  • 是否有一个标志实际上阻止了所有实体的解析?

问:LIBXML_NOENT 标志到底有什么作用?

该标志允许替换 XML 字符实体引用,无论外部与否。

问:为什么叫LIBXML_NOENT?它是什么缩写,LIBXML_ENT 或 LIBXML_PARSE_EXTERNAL_ENTITIES 不是更合适吗?

这个名字确实有误导性。我觉得NOENT只是意味着解析文档的节点树不会包含任何实体节点,因此解析器将替换实体。没有NOENT,解析器创建DOM实体引用 http://php.net/manual/en/class.domentityreference.php实体引用的节点。

问:是否有一个标志实际上可以阻止解析所有实体?

LIBXML_NOENT使得能够替代all实体参考。如果您不想扩展实体,只需省略该标志即可。例如

$xml = '<!DOCTYPE test [<!ENTITY c "TEST">]>
<test>&c;</test>';
$dom = new DOMDocument();
$dom->loadXML($xml);
echo $dom->saveXML();

prints

<?xml version="1.0"?>
<!DOCTYPE test [
<!ENTITY c "TEST">
]>
<test>&c;</test>

看起来textContent自行替换实体,这可能是 PHP 绑定的一个特性。没有LIBXML_NOENT,它会导致内部和外部实体的不同行为,因为后者不会被加载。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

LIBXML_NOENT 是做什么的(为什么不叫 LIBXML_ENT)? 的相关文章

随机推荐

  • 验证 $_REQUEST 内容是否为 int

    我正在尝试执行一个基本操作 检查字符串是否是数字 这不起作用 qty REQUEST qty if is int qty FALSE echo error else echo ok 这个的作用是 qty 1 if is int qty FA
  • 如何在Chrome浏览器中使用HTML5画布绘制图像阴影

    我们可以在 HTML5 中通过 g shadowBlur 方法绘制阴影 在大多数浏览器中都可以 除了 Chrome 当我绘制透明图像阴影时 如下所示 我该如何解决这个问题 我的 Chrome 版本是 Chrome for Mac OS X
  • Firefox port.emit 和 port.on 在扩展中不起作用

    我正在尝试制作一个 Firefox 扩展 我需要与后台脚本 main js 交换数据 所以我尝试使用端口 但它不起作用 Content js self port on alert function alert Listen to messa
  • DoReferenceTransaction 未取得成功

    看看我如何开始完整的程序 步骤1 首先调用SetExpressCheckout AMT 0 00 PAYMENTREQUEST 0 AMT 0 00 PAYMENTACTION BILLINGAGREEMENTDESCRIPTION BIL
  • Jekyll / gem:未解决的规格

    我正在使用 Jekyll 我有两个独立的存储库 我想我最近更新了一个 上次我渲染博客时一切正常 现在只是这样 jekyll serve watch WARN Unresolved specs during Gem Specification
  • 如何在 Eclipse Luna 中获取旧颜色主题?

    我已经安装了 Eclipse Luna 由于某种原因 他们删除了我熟悉的默认浅色主题 他们提供了 4 个主题选项 全部都是黑色 我很惊讶他们放弃了旧主题 至少它应该被保留为一个选项 问题 如何在不依赖主题插件的情况下恢复旧主题 如果我必须求
  • 如何通过 SQL*Plus 在 Oracle 11g 数据库中插入 Blob 数据类型值

    我创建了一个 Blob 数据类型的表 但我不知道如何向表中插入值或使用 SQL Plus 查看表内容 请帮我 这取决于您想要放入 BLOB 中的数据类型 让我们考虑一下该表 create table b1 id number b blob
  • 每个方法调用的 WCF CreateChannel

    在我当前的 Web 项目中 我们为远程服务的每个方法调用执行 ClientFactory CreateChannel 这真的有必要吗 最佳实践是什么 这在某种程度上取决于您的要求 相对而言 开设渠道的成本很高 最佳实践是让执行远程调用的类实
  • 处理 Expect 脚本中的多个语句

    我是 Expect 脚本新手 我在 Linux 机器上为 ssh 编写了一个 Expect 脚本 在 ssh 到不同的 Linux 机器时遇到了问题 下面我复制了脚本 usr local bin expect set LinuxMachin
  • Django admin 中的多张图片上传

    我在尝试编写正确的模型以将多个图像上传到我的 Django 应用程序时遇到了很多麻烦 我希望能够通过 django 管理上传这些图像 我尝试过使用 ImageField 但它一次只允许一张图片 而且我还希望能够调整图像大小 这是我的 mod
  • Bootstrap 输入字段居中

    我对此很陌生 尤其是 Bootstrap 我有这个代码 div class row div class col lg 3 div class input group div div div
  • PowerShell 的调用运算符 (&) 语法和双引号

    有人可以向我解释这个结果吗 多年来我浪费了很多时间试图掌握 PowerShell 调用命令的语法 但这 我什至无法猜测如何从输入中获取此结果 PS C Users P gt echoargs 1 2 3 4 5 6 7 8 9 Arg 0
  • 如何在 Django Rest 框架可浏览 API 中发送标头

    如何在 Django REST 框架可浏览 API 视图中发送标头 我通过匹配标头中传递的令牌来验证调用 我可以在邮递员中使用该 API 并且效果很好 但我想提供输入以将访问令牌放在 Django REST 框架的可浏览 API 上 作为参
  • 在 db2 9.1 中删除过程/视图/表之前如何检查它是否存在?

    我们如何在 db2 中编写以下伪代码 If Proc exists Drop Proc Create Proc Else Create Proc 我在谷歌搜索后发现的一种解决方案是忽略返回码 我们有更优雅的方法来做到这一点吗 Thanks
  • 如何解决phpmyadmin超时问题?

    我想要导入巨大的 at least300 mb 通过 phpMyAdmin 的 SQL 脚本 我试过了 post max size 750M upload max filesize 750M max execution time 300 m
  • qgis ModuleNotFoundError:没有名为“PyQt5.pyqtconfig”的模块

    Traceback most recent call last File D Study qgis3 QGIS cmake FindPyQt5 py line 34 in
  • React-snap 和 React-router 一起出现问题

    我需要启动一个react应用程序 并且需要预渲染和路由 所以我安装了react snap和react router 显然 react router 负责路由 react snap 负责预渲染 使用 npm start 在本地看起来一切都很好
  • attr_internal 的用途是什么

    我是 ruby on Rails 的新手 在浏览 Rails 代码时我发现 attr internal response body attr internal action name attr internal formats 它是什么 它
  • PyCharm 挂在“扫描文件到索引”后台任务上

    当我启动 PyCharm 时它就会启动扫描文件到索引后台任务并挂起约 1 小时 永远 有时它会完成并继续更新索引任务 它持续约 3 小时 永远 当这些进程正在运行时 很难使用 PyCharm 甚至其他一些程序 PyCharm 从约 200M
  • LIBXML_NOENT 是做什么的(为什么不叫 LIBXML_ENT)?

    在 PHP 中 可以将可选参数传递给各种 XML 解析器 其中之一是LIBXML NOENT The 文档 https secure php net manual en libxml constants php对此有这样的说法 LIBXML