【发布时间】:2010-09-19 11:01:19
【问题描述】:
我最近在我发布的一些 RSS 提要中引入了 HTML(到目前为止只有纯文本,没有标记),我想知道哪种方法更好:使用字符编码(例如 htmlspecialchars)或将所有内容封装在CDATA?
在我看来,CDATA 可能更容易,但我不清楚是否有任何理由(微妙或其他)选择一种方法而不是另一种方法。 (对于初学者来说,CDATA 方法在查看源代码时会更容易阅读……)
【问题讨论】:
我最近在我发布的一些 RSS 提要中引入了 HTML(到目前为止只有纯文本,没有标记),我想知道哪种方法更好:使用字符编码(例如 htmlspecialchars)或将所有内容封装在CDATA?
在我看来,CDATA 可能更容易,但我不清楚是否有任何理由(微妙或其他)选择一种方法而不是另一种方法。 (对于初学者来说,CDATA 方法在查看源代码时会更容易阅读……)
【问题讨论】:
CDATA 用于不应由 XML 解析器解析的任何数据。任何不在 CDATA 块中的标签将由 XML 解析器解析,并可能具有不同的含义。
如果不需要的话,CDATA 也会给解析器带来开销。在您知道不会使用 HTML(或其他方式)时尽量避免使用 CDATA 块,否则使用它。
也就是说,我确实同意 jamesh 的观点,因为您应该始终更喜欢 Atom 而不是 RSS。我制作了一个提要阅读器,在抓取提要时,总是更喜欢 Atom 而不是 RSS。
【讨论】:
就个人而言,CDATA 更容易,因为它允许订阅者显示实际的 HTML,而不需要他们的读者做任何有趣的事情。
如果您使用 HTML 编码,订阅者阅读器或网站本身必须解码源代码以显示 HTML
【讨论】:
冒着给出您可能不想听到的答案的风险:使用Atom而不是 RSS。
Atom 是很好的命名空间 XML,因此您可以直接混合和匹配 XHTML,而不必担心您询问的编码问题。
几乎所有 RSS 都支持它,而且因为它只是普通的 Atom,如果你真的不想使用库来操作它,它会更容易滚动。
Atom 也是 IETF 标准,而 RSS 不是。
【讨论】:
htmlentities() 就像一个魅力。无需使用 CDATA。 http://php.net/manual/en/function.htmlentities.php
【讨论】: