我的PHP应用程序正在输出一个XML文件,其中一些输出可能包含商标和/或版权字符。有没有办法在输出中转义这些字符?
谢谢!
在XML中唯一需要转义的特殊字符是:
< - <
> - >
& - &
" - "
' - ' / '
可以在属性值或文本节点中使用转义的变体。以下两个示例表示相同的内容。
<foo><Hello@World></foo>
<foo><![CDATA[<Hello@World>]]></foo>
<foo/>
的nodeValue始终为<Hello@World>
。
第一个是文本节点,第二个是cdata部分。在cdata部分中,不允许实体,并且禁止序列]]>
。如果CDATA部分包含]]>
,DOM将自动拆分该部分。
其他特殊字符(如©)只有在您的XML没有使用支持unicode的编码时才需要转义。如果您想要一个简单的ASCII XML,您可以将特殊字符编写为数字字符引用。数字是Unicode中字符的代码点。
© - © / ©
架构和DTD可以定义命名字符实体引用。这些在XML中不可用,但可以以基于XML的格式提供。(X) HTML就是一个例子。
© - ©
如果您使用DOM,它会根据需要处理它。
在UTF-8中,只有XML特殊字符会被转义。
$dom = new DOMDocument('1.0', 'UTF-8');
$dom->appendChild($dom->createElement('foo'));
$dom->documentElement->appendChild($dom->createTextNode('<©€äöü>'));
echo $dom->saveXml();
输出:
<?xml version="1.0" encoding="UTF-8"?>
<foo><©€äöü></foo>
在ASCII中,将有更多的内容被转义:
$dom = new DOMDocument('1.0', 'ASCII');
$dom->appendChild($dom->createElement('foo'));
$dom->documentElement->appendChild($dom->createTextNode('<©€äöü>'));
echo $dom->saveXml();
输出:
<?xml version="1.0" encoding="ASCII"?>
<foo><©€äöü></foo>