【发布时间】:2018-09-08 11:28:27
【问题描述】:
我有一个 xml 文件,当我使用 DOMDocument:: 加载此文件时,加载并保存它会产生空白,请建议如何删除此空白。下面是我的代码。
$file = 'myfile.xml'
$doc = new DOMDocument('1.0', 'utf-8');
$doc->preserveWhiteSpace = false;
$doc->load($file);
echo htmlentities($doc->saveXML());exit;
它给出这样的输出
<?xml version="1.0"?> <Esign ver="2.0"></Esign>
如何删除这个空间
实际上我正在尝试执行数字签名 下面是我的数字签名函数,在这个函数中,我发现在 $doc->load($file)
之后添加了空间public function digital_sign($file){
$doc = new DOMDocument('1.0', 'utf-8');
$doc->preserveWhiteSpace = false;
$doc->load($file);
// Create a new Security object
$objDSig = new XMLSecurityDSig();
// Use the c14n exclusive canonicalization
$objDSig->setCanonicalMethod(XMLSecurityDSig::C14N_COMMENTS);
// Sign using SHA-256
$objDSig->addReference($doc,XMLSecurityDSig::SHA256,array('http://www.w3.org/2000/09/xmldsig#enveloped-signature'),array('force_uri'=>'true'));
// Create a new (private) Security key
$objKey = new XMLSecurityKey(XMLSecurityKey::RSA_SHA256, array('type'=>'private'));
// Load the private key
$objKey->loadKey('private_key.pem', TRUE);
$objDSig->sign($objKey);
// Add the associated public key to the signature
$options['subjectName'] = "true";
$objDSig->add509Cert(file_get_contents('public_key.cer'),true,false,$options);
// Append the signature to the XML
$objDSig->appendSignature($doc->documentElement);
$filenewpath = 'newfile1.xml';
ob_clean();
if($doc->save($filenewpath)){
return true;
}
}
$file 包含下面的 xml
<Esign ver="2.0" sc="Y" ts="2018-03-30T07:10:47" txn="97051198" ekycMode="U" ekycId="88XXXXXXXXX" ekycIdType="A" aspId="ASPSXXXXXXXXXXX156" AuthMode="1" responseSigType="pkcs7" preVerified="n" organizationFlag="n" responseUrl="https://www.google.com"><Docs><InputHash id="1" hashAlgorithm="SHA256" docInfo="Test pdf">60bdd13ea4827b8de375c79dc3ff847f83b55bd73b6461523fdf8f843b5a0d5b</InputHash></Docs></Esign>
签名后输出
<?xml version="1.0"?> <Esign ver="2.0" sc="Y" ts="2018-03-30T07:21:03" txn="39242002" ekycMode="U" ekycId="88XXXXXXXXX" ekycIdType="A" aspId="ASPSXXXXXXXXXXX156" AuthMode="1" responseSigType="pkcs7" preVerified="n" organizationFlag="n" responseUrl="https://www.stage.kissht.com/welcome/email"><Docs><InputHash id="1" hashAlgorithm="SHA256" docInfo="Test pdf">60bdd13ea4827b8de375c79dc3ff847f83b55bd73b6461523fdf8f843b5a0d5b</InputHash></Docs><Signature xmlns="http://www.w3.org/2000/09/xmldsig#"><SignedInfo><CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithComments"/><SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/><Reference URI=""><Transforms><Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/></Transforms><DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/><DigestValue>bstOvGSSvkuEcriLXk6Qj2nhzEb3BZ1oEUtOYoMFyCw=</DigestValue></Reference></SignedInfo><SignatureValue>Uj3aSvmbMhUJX5Bwj3Bk3/F5U6IFx4LMS1BWMLTeEtnMvcfrJo25YGZHQtt1CnPbT5ygKEU7dQ3IBRsghqDvG+VAHYbU9gfX1N/5NxLM15oGWhZ3oSlNv7ouS1Ajzvaiei/OTr83jlUVfTW/MftYo/z6wYFdZp6Gc+0Fp38RLTzYPLr0l34NN/dIBy5/+FDYc9yTJrkwqj4SEQelmt0mzbV2jMo1/Nbvf+BLJq4+QMBoqjCiAlqcqc2/xX6K1xlUrPRwy6FC7ymFMBth0+9HJ6KLIwO+8Q+iUZgj3YFQdry1YGVDF1YNSTo5YcJcqrXycLFjTK2PDFcJ4rJg56IaXA==</SignatureValue><KeyInfo><X509Data><X509SubjectName>CN=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX</X509SubjectName><X509Certificate>MIIGCDCCBPCgAwIBAgIEANFsFzANBgkqhkiG9w0BAQsFADCBkzELMAkGA1UEBhMCSU4xKjAoBgNVBAoTIWVNdWRocmEgQ29uc3VtZXIgU2VydmljZXMgTGltaXRlZDEdMBsGA1UECxMUQ2VydGlmeWluZyBBdXRob3JpdHkxOTA3BgNVBAMTMGUtTXVkaHJhIFN1YiBDQSBDbGFzcyAyIGZvciBEb2N1bWVudCBTaWduZXIgMjAxNDAeFw0xNzAyMjEwOTMwMjhaFw0xOTAyMjEwOTMwMjhaMIHwMQswCQYDVQQGEwJJTjEyMDAGA1UEChMpU0kgQ1JFVkEgQ0FQSVRBTCBTRVJWSUNFUyBQUklWQVRFIExJTUlURUQxCzAJBgNVBAsTAklUMQ8wDQYDVQQREwY0MDAwMTIxFDASBgNVBAgTC01BSEFSQVNIVFJBMQ8wDQYDVQQJEwZNVU1CQUkxNzA1BgNVBDMTLjIwMiAyMDMgUEVOSU5TVUxBIENFTlRSRSBEUiBTIFMgUkFPIFJPQUQgUEFSRUwxLzAtBgNVBAMTJkRTIFNJIENSRVZBIENBUElUQUwgU0VSVklDRVMgUFJJVkFURSAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsi9KF+7r6qBvsM27zlyYqQHXw867koX3CNNw4onRPSoxFEv1yThaYSA5MUFp5OQlq7/wKWWhKh842BVRJ7ov7iLSUXHSEmvbw70czribN3Ps9xXnOeHT+REchBeshttjdaZ7NTMyITVPcL6rzZ3Z8FT1ce9vtl4akls9ghXRRBTatzP/QKztLcxyB7RkGXV+tESeAhPqnP9RsHbGLRCQdIo9yEc4nJxDvuItxdTs/BcUTLpxeYaUlYYhXAeMWmHMsm5EtGH6eTyG3kWyaFyQF2aMdwGALxaHHie/OtLWm5w1tecOfpymO6uhlC6dfzhQTBwgHJGw/8P+wSK7gQnQbfG3zSQiGJn2vjy9sHTbmJoLcOc5ZhyhaWSMymTepXKwXpI</X509Certificate></X509Data></KeyInfo></Signature></Esign>
如何删除这个空间
<?xml version="1.0"?> <Esign
【问题讨论】:
-
尝试在htmlentitites中使用ENT_SUBSTITUTE标志,检查是否只有空格,可以是其他符号unicode
-
我试过但什么也没得到,甚至试图将输出保存在一个文件中,得到相同的带有空格的 xml。
标签: php xml xml-parsing xmlhttprequest digital-signature