【发布时间】:2015-04-05 16:06:19
【问题描述】:
当添加可能包含麻烦字符(例如 &、)的字符串时,DOMDocument 会抛出警告,而不是清理字符串。
我正在寻找一种使字符串 xml 安全的简洁方法——最好是利用 DOMDocument 库。
我正在寻找比preg_replace 或htmlspecialchars 更好的东西。我看到DOMDocument::createTextNode(),但是生成的DOMText 对象很麻烦,不能交给DOMDocument::createElement()。
为了说明问题,这段代码:
<?php
$dom = new DOMDocument;
$dom->formatOutput = true;
$parent = $dom->createElement('rootNode');
$parent->appendChild( $dom->createElement('name', 'this ampersand causes pain & sorrow ') );
$dom->appendChild( $parent );
echo $dom->saveXml();
产生这个结果(见eval.in):
Warning: DOMDocument::createElement(): unterminated entity reference sorrow in /tmp/execpad-41ee778d3376/source-41ee778d3376 on line 6
<?xml version="1.0"?>
<rootNode>
<name>this ampersand causes pain </name>
</rootNode>
【问题讨论】:
-
“比 preg_replace 或 htmlspecialchars 更好”——在哪些方面更好?
-
preg_replace 和 htmlspecialchars 是广谱工具。 preg_replace 方法完全取决于开发人员对 xml 字符问题的了解。 htmlspecialcharacters 接近seems to be disputed。由于这个问题是 XML 特有的,我希望 XML 库能够提供干净的方法来处理它。
标签: php xml special-characters domdocument