PHP DOMDocument转换&到& - 如何保持行值

时间:2013-10-14 15:36:43

标签: php xml special-characters domdocument

我正在使用PHP DOMDocument,有一刻我正在使用createTextNode

$copyrightNode = $doc->createTextNode('©');
$copyrightContainer = $dom_output->createElement('copyright-statement');

$copyrightContainer->appendChild($copyrightNode);

在一段时间后生成的XML中,我得到了:

<copyright-statement>&amp;#x000A9;</copyright-statement> 

我的目标是

<copyright-statement>&#x000A9;</copyright-statement> 

关于如何做到这一点的任何想法?

提前谢谢。

2 个答案:

答案 0 :(得分:1)

当PHP输出XML文档时,任何无法在指定输出编码中表示的字符都将替换为数字实体(十进制或十六进制,两者都是等效的):

<?php

$dom = new DOMDocument;

$node = $dom->createElement('copyright-statement', '©');
$dom->appendChild($node);

$dom->encoding = 'UTF-8';
print $dom->saveXML(); // <copyright-statement>©</copyright-statement>

$dom->encoding = 'ASCII';
print $dom->saveXML(); // <copyright-statement>&#169;</copyright-statement>

答案 1 :(得分:0)

这里要做的正确的事情是使用createEntityReference方法(例如createEntityReference("copy");),然后appendChild这个实体。

示例:

<?php 
$copyrightNode = $doc->createEntityReference("copy"); 
$copyrightContainer = $dom_output->createElement('copyright-statement');
$copyrightContainer->appendChild($copyrightNode);

创建&#x000A9;你可以(我相信)做:

$copyrightNode = $doc->createCDATASection("&#x000A9;"); 
$copyrightContainer = $dom_output->createElement('copyright-statement');
$copyrightContainer->appendChild($copyrightNode);