Skip to content

php_ref_libxml

libxml 扩展提供了一整套全面的函数和常量,用于在 PHP 中处理 XML 数据。它构成了 SimpleXML、DOM (Document Object Model) 和 XSLT 等其他 PHP XML 扩展的基础。理解 libxml 对于高级 XML 操作和错误处理很有帮助。

这些函数允许您控制 XML 解析和操作的各个方面,包括错误处理、文档加载选项以及访问 libxml 库信息。

libxml 扩展在现代 PHP 安装中默认启用。通常无需单独安装。

如果您从源代码编译 PHP 或使用极简环境,您可能需要确保在编译期间提供了 libxml 开发包(例如,Debian/Ubuntu 上的 libxml2-dev,CentOS/Fedora 上的 libxml2-devel)。对于大多数依赖预构建 PHP 包的用户,这会自动处理。

以下是 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) 攻击。

这些常量用作标志,通常作为参数传递给 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”)。