经过几个小时的研究,我无法找到答案。我正在尝试将 XML 字符串发送给第三方,因此我需要对一些字符进行编码,在本例中是单引号,也许还有双引号。我使用 PHP XML Dom 来实现此目的,但 saveXML() 函数似乎总是对引号进行取消编码。下面是一个非常简单的示例,当您查看输出时,’已被替换为 ' 但其他人仍然有他们的代码。谁能解释一下为什么会这样以及我如何解决它(不进行 str_replace)。谢谢。
$XMLDoc = new DOMDocument('1.0', 'utf-8');
$comments = $XMLDoc->createElement('Comments');
$text = $XMLDoc->createElement('Text', "An apostrophe here < ' > Pound sign: £");
$comments->appendChild($text);
$XMLDoc->appendChild($comments);
echo $XMLDoc->saveXML();
最佳答案
您需要使用 createEntityReference 函数使其不受干扰地通过。
示例:
$XMLDoc = new DOMDocument('1.0', 'utf-8');
$comments = $XMLDoc->createElement('Comments');
$text1 = $XMLDoc->createTextNode('An apostrophe here < ');
$text2 = $XMLDoc->createEntityReference('apos');
$text3 = $XMLDoc->createTextNode(' > Pound sign: ');
$text4 = $XMLDoc->createEntityReference('pound');
$comments->appendChild($text1);
$comments->appendChild($text2);
$comments->appendChild($text3);
$comments->appendChild($text4);
$XMLDoc->appendChild($comments);
echo $XMLDoc->saveXML();
请注意,某些项目默认由 createTextNode 编码。 < 和 > 已编码,井号未编码。 希望这有帮助!
关于PHP XML 实体编码问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9279195/