2012-10-10 29 views
3

我已经在PHP中编写了一个小类来生成一个简单的RSS提要。RSS提要:htmlspecialchars()与CDATA

项目描述还应该能够包含html标签。

我想知道哪一个是更好的方式和什么优点/每种方法的优缺点:

$item .= "<description><![CDATA[" . $description . "]]></description>\n"; 

$item .= "<description>" . htmlspecialchars($description, ENT_NOQUOTES, "UTF-8") . "</description>\n"; 

的CDATA方法唯一的缺点我能想到的是,我必须事先检查,如果字符串$ description包含

"<![CDATA[" or "]]>". 

谢谢提前澄清。

+0

我也曾经遇到仍然与RSS提要乱七八糟的字符(使其无效),使用用htmlspecialchars(),当对不起,我不能更具体地说 – kalpaitch

+0

您应该使用XML编写器库来生成XML,而不是手动将它组合在一起。 – deceze

回答

1

当你想在那里使用HTML代码时,只有1个选择,即CDATA部分。

原因:Feed必须是有效的XML,但HTML可能不是有效的XML。因此,如果您在没有CDATA的情况下使用HTML,那么描述内部无效XML内的所有内容都将导致XML-Parser-Error。这可能已经通过这样简单的事情像&nbsp;<br>强制(什么是有效的HTML,但无效的XML)

CDATA章节将对其进行分析,因此您可以使用那里,你想什么。

但是,您最好使用<content:encoded>作为标记。