不使用<>转义特殊字符并引用PHP

时间:2015-02-13 09:38:47

标签: php xml svg

我有一个XML / SVG。部分原因:

<text id="p6_segmentMainLabel5-outer" class="p6_segmentMainLabel-outer" style="font-size: 11px; font-family: arial; fill: rgb(170, 170, 170);">BüG [349]</text>

里面有一个特殊的角色。如何在不转义所有“&lt;”的情况下清理这些特殊字符的整个XML和“&gt;”到&lt;和&gt;?我可以创建一个我要转换的所有字符的数组,但我想要一个只排除&lt;&gt;的方法。和行情有一个干净的XML。

1 个答案:

答案 0 :(得分:2)

对变音符号进行编码不会使您的XML“更清晰”,但更难以阅读。

除非您想创建ASCII XML,否则不需要对不属于ASCII的变音符号和其他字符进行编码。这不是经常需要的。

使用UTF-8作为XML的编码,99%的时间你会很好。

如果需要ASCII,请在XML-API上指定编码(默认为UTF-8):

$dom = new DOMDocument('1.0', 'ASCII');
$dom
  ->appendChild($dom->createElement('text'))
  ->appendChild($dom->createTextNode('ÄÖÜ'));
echo $dom->saveXml();

输出:

<?xml version="1.0" encoding="ASCII"?>
<text>&#196;&#214;&#220;</text>

可以将XML加载到DOM中并将所有节点复制到定义为使用ASCII的新DOM:

$source = new DOMDocument();
$source->loadXml(
  '<?xml version="1.0" encoding="utf-8" ?><text>ÄÖÜ</text>'
);

$target = new DOMDocument('1.0', 'ASCII');
$target->appendChild(
  $target->importNode(
    $source->documentElement, TRUE
  )
);
echo $target->saveXml();

如果您将XML生成为文本,则可以使用htmlentities()函数转换字符串。