![](/img/trans.png)
[英]PHP Call to a member function saveXML() on a non-object on AJAX POST?
[英]PHP DocDocument, in saveXML() function change " by "
我尝试使用DOMDocument库,但是我需要原始XML文本而不作进一步更改,因为它是带有数字证书(XMLSecurityKey openssl)的签名xml。
简单步骤loadxml和savexml更改原始文本。
我的代码是:
$PROCESSED_TEXT = "<node><child>product & ' > < "</child></node>";
$obj = new DOMDocument();
$obj->formatOutput = false; // (needed)
$obj->preserveWhiteSpace = true; // (needed)
$obj->encoding = 'ISO-8859-1'; // (needed)
$obj->loadXML($PROCESSED_TEXT);
$strXMLFinal = $obj->saveXML();
echo $strXMLFinal;
OUTPUT:
<node><child>producto & ' > < "</child></node>
我需要一样的东西:
<node><child>product & ' > < "</child></node>
我尝试使用以下方法均未成功:
$obj->xmlStandalone = true;
$obj->substituteEntities = false;
$obj->resolveExternals = false;
$obj->strictErrorChecking = false;
任何想法?
就DOM而言,您的输入和输出完全相同。 您签名的输入内容包含'
和"
表示使用的签名过程不正确。 在签名之前,应该对XML进行规范化 ,因为可能存在许多同等有效的序列化,否则会破坏XML签名。
文本节点-字符串值,但所有
&
除外,均用&
代替&
,所有开括号(<)均替换为<
,所有的右尖括号(>)替换为>
,并且所有#xD字符均替换为
。
具体省略的是'
和"
表示为'
和"
。
规范化XML的唯一位置是"
在属性值之内,并且在任何地方都找不到'
。
还要注意的是,而不是$obj->saveXML()
你可以用$obj->C14N()
以确保您的输出是规范形式,因此将匹配适当的符号输入。
如果您无法收到正确的输入,则唯一的选择是在序列化后处理XML字符串。 确切的操作方法-是否进行预处理以标记特殊字符并进行后期处理以替换特殊字符; 或用原始输入字符串批量替换部分输出-首先取决于您对所有这些的处理方式。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.