You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何去除XML标签间空白?DOMDocument加载保存后仍有空格

嘿,这个问题我之前做XML数字签名的时候也踩过坑!DOMDocument默认的序列化行为有时候会偷偷插入空格,这对签名来说简直是致命的——毕竟签名是基于精确的字节内容,多一个空格都能导致后续验证失败。

先看你的代码问题:你设置了preserveWhiteSpace = false,这能处理加载时原XML里的空白节点,但保存的时候DOMDocument还是可能会在空标签对之间或者XML声明后自动加空格。解决办法很简单,只要再加一行禁用自动格式化的设置就行:

修改后的代码如下:

$file = 'myfile.xml';
$doc = new DOMDocument('1.0', 'utf-8');
$doc->preserveWhiteSpace = false;
$doc->formatOutput = false; // 关键:关闭自动格式化输出,避免多余空格
$doc->load($file);
echo htmlentities($doc->saveXML());
exit;

这样输出的XML就会变成<?xml version="1.0" encoding="utf-8"?><Esign ver="2.0"></Esign>,完全没有多余的空格了。

另外特意提醒下,做数字签名的场景下,绝对不能开启formatOutput = true——哪怕是为了可读性也不行,格式化后的空格、换行都会改变XML的字节内容,直接导致签名验证不通过。如果需要调试查看XML结构,可以单独复制一份来格式化,用于签名的版本必须保持严格的无冗余空白状态。

内容的提问来源于stack exchange,提问作者codex

火山引擎 最新活动