PHP XML实体编码问题


PHP XML Entity Encoding issue

经过几个小时的研究,我一直无法找到答案。我正试图将一个XML字符串发送给第三方,因此我需要对一些字符进行编码,在本例中是单引号,也可能是双引号。我使用PHPXMLDom来实现这一点,但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进行编码<和>被编码,磅符号没有。希望这能有所帮助!