php_ref_libxml
PHP libxml 函数
Section titled “PHP libxml 函数”PHP libxml 介绍
Section titled “PHP libxml 介绍”libxml 扩展提供了一整套全面的函数和常量,用于在 PHP 中处理 XML 数据。它构成了 SimpleXML、DOM (Document Object Model) 和 XSLT 等其他 PHP XML 扩展的基础。理解 libxml 对于高级 XML 操作和错误处理很有帮助。
这些函数允许您控制 XML 解析和操作的各个方面,包括错误处理、文档加载选项以及访问 libxml 库信息。
安装 / 启用
Section titled “安装 / 启用”libxml 扩展在现代 PHP 安装中默认启用。通常无需单独安装。
如果您从源代码编译 PHP 或使用极简环境,您可能需要确保在编译期间提供了 libxml 开发包(例如,Debian/Ubuntu 上的 libxml2-dev,CentOS/Fedora 上的 libxml2-devel)。对于大多数依赖预构建 PHP 包的用户,这会自动处理。
PHP libxml 函数
Section titled “PHP libxml 函数”以下是 libxml 扩展提供的一些关键函数:
| 函数 (Function) | 描述 (Description) |
|---|---|
| libxml_clear_errors() | 清空 libxml 错误缓冲区。在处理多个文档或操作时很有用。 |
| libxml_get_errors() | 检索一个 LibXMLError 对象数组,详细说明上次 XML 操作期间遇到的错误。 |
| libxml_get_last_error() | 检索遇到的最后一个错误,作为 LibXMLError 对象。 |
| libxml_set_streams_context() | 设置下一个 libxml 文档加载或写入操作的流上下文。用于控制网络访问或其他流行为。 |
| libxml_use_internal_errors(bool $use_errors = false) | 启用或禁用标准的 libxml 错误报告。当设置为 true 时,错误会被抑制,您必须使用 libxml_get_errors() 来检查问题。 |
| libxml_disable_entity_loader(bool $disable = true) | 禁用或启用外部实体的加载。在解析不受信任的 XML 数据时禁用此项(true)至关重要,以防止 XML 外部实体 (XXE) 攻击。 |
PHP libxml 常量
Section titled “PHP libxml 常量”这些常量用作标志,通常作为参数传递给 simplexml_load_file()、simplexml_load_string()、DOMDocument::load() 等函数,以控制解析行为。
| 常量 (Constant) | 描述 (Description) |
|---|---|
| LIBXML_COMPACT | 激活小节点分配优化。可能会提高处理小型文档的性能。 |
| LIBXML_DTDATTR | 设置默认的 DTD 属性。 |
| LIBXML_DTDLOAD | 加载外部子集(例如 DTD)。 |
| LIBXML_DTDVALID | 根据其 DTD 验证文档。 |
| LIBXML_NOBLANKS | 移除空白节点(可忽略的空白符)。 |
| LIBXML_NOCDATA | 将 CDATA 节合并到文本节点中。 |
| LIBXML_NOEMPTYTAG | 扩展空标签(例如,<tag/> 到 <tag></tag>)。影响使用 DOMDocument 保存时的行为。 |
| LIBXML_NOENT | 替换实体。警告: 处理不受信任的 XML 数据时可能存在危险,因为可能存在实体扩展漏洞。考虑使用 LIBXML_NONET 和 libxml_disable_entity_loader()。 |
| LIBXML_NOERROR | 抑制错误报告(与 libxml_use_internal_errors(true) 一起使用)。 |
| LIBXML_NONET | 文档加载期间禁用网络访问。在处理潜在恶意外部实体或模式时,这对安全性很重要。 |
| LIBXML_NOWARNING | 抑制警告报告。 |
| LIBXML_NOXMLDECL | 使用 DOMDocument 保存文档时,移除 XML 声明(例如,<?xml version='1.0'?>)。 |
| LIBXML_NSCLEAN | 移除冗余的命名空间声明。 |
| LIBXML_XINCLUDE | 实现 XInclude 替换。 |
| LIBXML_PARSEHUGE | 放松解析器的硬编码限制。请谨慎使用,因为它可能会影响性能或安全性。 |
| LIBXML_BIGLINES | 通过以不同的方式报告行号,允许存储大于 65535 的行号。 |
| LIBXML_ERR_ERROR | 表示可恢复的错误。 |
| LIBXML_ERR_FATAL | 表示致命错误。 |
| LIBXML_ERR_NONE | 表示没有错误。 |
| LIBXML_ERR_WARNING | 表示简单警告。 |
| LIBXML_VERSION | 底层 libxml 库版本(整数,例如 2.9.1 对应 20901)。 |
| LIBXML_DOTTED_VERSION | 底层 libxml 库版本(字符串,例如 “2.9.1”)。 |