XML -转义字符串的正确方法


XML - proper way to escape string

我只是想在标签中添加任何字符串。

我正在使用这个代码转义字符串:

$name = $this->_dom->createElement('name', htmlspecialchars($userName, ENT_COMPAT,'utf-8'));
$item->appendChild($name);

我遇到了一个问题,我的一个用户在name字段中放入了一些特定的符号,整个xml提要被破坏了。我必须如何转义字符串?

我认为通过使用createTextNode而不是将其作为参数传递给createElement来添加xml节点的值可能会解决您的问题。

我的解决方案:

$title = $this->_dom->createElement('title',
    htmlspecialchars($playlist->getTitle(), 
    ENT_DISALLOWED, 'utf-8')
);

并且当你输出xml时,你必须去掉` `(替换字符),参见这个关于ENT_DISALLOWED的相关链接,如:

echo str_replace('�', '', $this->_dom->saveXML());

这种方式允许我们显示任何带有html实体和/或特殊字符的字符串