PHP无内置数组转XML函数,需用SimpleXML(推荐)或DOMDocument实现,关键在处理嵌套、重复元素、属性/文本区分及非法字符转义,并注意键名合法性、空值处理与UTF-8编码。

PHP 将数组转为 XML 没有内置函数,但可以通过递归构造或使用 SimpleXML 扩展实现。关键在于处理嵌套结构、同级重复元素、属性与文本内容的区分,以及避免非法字符(如特殊符号、空格开头的键名)导致 XML 格式错误。
用 SimpleXML 手动构建(推荐,灵活可控)
适合大多数场景,能精确控制节点名、属性和文本内容:
- 先创建一个根节点:
$xml = new SimpleXMLElement(''); - 写一个递归函数,根据数组键值类型决定是添加子节点(字符串/数字)、属性(以
@开头的键),还是继续嵌套(数组) - 对值做
htmlspecialchars()转义,防止、&等破坏 XML 结构 - 示例:数组
['name' => '张三', 'age' => 25]→张三 25
用 DOMDocument + 递归(更严谨,支持编码和格式化)
比 SimpleXML 更底层,适合需要设置文档声明、缩进、编码(如 UTF-8)的正式输出:
- 初始化:
$dom = new DOMDocument('1.0', 'UTF-8'); - 用
$dom->formatOutput = true;自动缩进 - 递归遍历数组,对每个元素调用
$dom->createElement()或$dom->createAttribute() - 注意:DOMDocument 对空字符串、null 值更敏感,需提前过滤或转为空节点
处理常见坑点
实际转换中容易出错的地方:
立即学习“PHP免费学习笔记(深入)”;
-
键名含非法字符:XML 标签名不能以数字或
-、.开头,建议统一前缀(如item_)或用下划线替换 -
同名多元素:如
['book' => ['a','b']]应转为多个,不能合并成一个节点a b -
空数组或 null 值:可转为空标签
或跳过,避免生成冗余结构 -
中文乱码:确保 PHP 文件本身是 UTF-8 编码,并在 XML 声明中明确指定
encoding="UTF-8"
基本上就这些。不需要装额外扩展,原生 PHP 就能搞定,核心是理清数组层级和 XML 节点映射关系,再加一点转义和容错处理。











