在 PHP 中生成 XML 文档(转义字符)
我正在从PHP脚本生成一个XML文档,我需要转义XML特殊字符。我知道应该转义的字符列表;但是正确的方法是什么?
字符应该只用反斜杠(\')转义,还是正确的方式是什么?有没有内置的PHP函数可以为我处理这个问题?
我正在从PHP脚本生成一个XML文档,我需要转义XML特殊字符。我知道应该转义的字符列表;但是正确的方法是什么?
字符应该只用反斜杠(\')转义,还是正确的方式是什么?有没有内置的PHP函数可以为我处理这个问题?
我创建了一个简单的函数,该函数使用 XML 中的五个“预定义实体”进行转义:
function xml_entities($string) {
return strtr(
$string,
array(
"<" => "<",
">" => ">",
'"' => """,
"'" => "'",
"&" => "&",
)
);
}
使用示例演示:
$text = "Test & <b> and encode </b> :)";
echo xml_entities($text);
输出:
Test &amp; <b> and encode </b> :)
通过使用可以达到类似的效果,但由于双重替换(未经测试,不推荐),它很脆弱:str_replace
function xml_entities($string) {
return str_replace(
array("&", "<", ">", '"', "'"),
array("&", "<", ">", """, "'"),
$string
);
}
使用 DOM 类生成整个 XML 文档。它将处理我们甚至不想关心的编码和解码。
编辑:这受到@Tchalvak的批评:
DOM 对象创建一个完整的 XML 文档,它不容易自己对字符串进行编码。
这是错误的,DOMDocument可以正确地输出一个片段,而不是整个文档:
$doc->saveXML($fragment);
它给出:
Test & <b> and encode </b> :)
Test &amp; <b> and encode </b> :)
如:
$doc = new DOMDocument();
$fragment = $doc->createDocumentFragment();
// adding XML verbatim:
$xml = "Test & <b> and encode </b> :)\n";
$fragment->appendXML($xml);
// adding text:
$text = $xml;
$fragment->appendChild($doc->createTextNode($text));
// output the result
echo $doc->saveXML($fragment);
观看演示