PHP文档转换&;至&;amp-如何保持行值
我正在使用PHP DOMDocument,同时我正在使用createTextNodePHP文档转换&;至&;amp-如何保持行值,php,xml,special-characters,domdocument,Php,Xml,Special Characters,Domdocument,我正在使用PHP DOMDocument,同时我正在使用createTextNode $copyrightNode = $doc->createTextNode('©'); $copyrightContainer = $dom_output->createElement('copyright-statement'); $copyrightContainer->appendChild($copyrightNode); 在稍后生成的XML中,我得到: &
$copyrightNode = $doc->createTextNode('©');
$copyrightContainer = $dom_output->createElement('copyright-statement');
$copyrightContainer->appendChild($copyrightNode);
在稍后生成的XML中,我得到:
<copyright-statement>&#x000A9;</copyright-statement>
&#x000A9;
我的目标是
<copyright-statement>©</copyright-statement>
©;
你知道怎么做吗
提前感谢。这里正确的做法是使用createEntityReference方法(例如,
createEntityReference(“复制”);
),然后将此实体追加
例如:
<?php
$copyrightNode = $doc->createEntityReference("copy");
$copyrightContainer = $dom_output->createElement('copyright-statement');
$copyrightContainer->appendChild($copyrightNode);
当PHP输出XML文档时,任何无法在指定输出编码中表示的字符都将替换为数字实体(十进制或十六进制,两者都是等效的):
编码='ASCII';
打印$dom->saveXML();//©
检查您没有调用htmlspecialchars()
或htmlspecialchars()
任何地方(例如在库中或任何地方)?@CD001,我正在调用htmlenties(),但在另一个节点上,不是在这个节点上。是的-只是测试它。。。DOMDocument似乎会自动将所有“&”字符转换为“&;”。使用createEntityReference()
方法将起作用,但仅对某些字符授予版权,正如dave在下面指出的那样,版权符号是其中之一(如©;
)。。。但我不认为这是一个令人满意的方式来添加任何字符。当然,您的XML文档无论如何都应该是UTF-8,这样您就可以写出)
,而不是费劲地编码它。另一个选项是创建一个CDATA节$doc->createCDATA节('©')
,它将输出©代码>在浏览器中查看时显示在屏幕上。。。但是将在代码中包含CDATA块
-取决于您使用的是什么。。。有趣的问题,不确定是否有可能以您想要的方式解决。。。Hmmmmm@CD001,谢谢你的评论。我知道CDATA,但我认为这对我来说不是一个好的解决方案。我读了一些东西,很明显,XML需要用&来转义&character,但我没有找到插入它的解决方案。谢谢dave,但这将创建©代码>我需要有和#x000A9代码>,这是强制性的。经过编辑,我相信这会起作用,CDATA部分不应更改符号。谢谢dave,我知道CDATA,但我的目标是真正插入&,而不是使用CDATA。有趣的回答是Alf,但您知道为了获得©代码>用于©标志?和#x000A9
与和#169相同代码>-一个是十六进制,一个是十进制。使用哪一个没有区别。嗯,好吧,但是如果我真的需要©代码>?如何转换©代码>在和#x000A9代码>?$xml=str#u replace(“©;”,“©;”,$xml)代码>-根据a,libxml2只输出十进制实体。为什么你真的需要十六进制?这可以,但是只对复制字符有效,但是如果我有一些像这样的字符,我需要十六进制值呢?我需要它,因为我必须为要求十六进制值的组织创建XML,不知道为什么,但这是一项要求。
$copyrightNode = $doc->createCDATASection("©");
$copyrightContainer = $dom_output->createElement('copyright-statement');
$copyrightContainer->appendChild($copyrightNode);
<?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>©</copyright-statement>