创建XML时,我想知道为什么使用CDATA块而不是仅仅转义数据。 CDATA块中是否允许某些内容无法转义并放置在常规标记中?
<node><![CDATA[ ...something... ]]></node>
而不是
<node>...something...</node>
当然,在任何一种情况下你都需要转义数据:
function xmlspecialchars($text)
{
return str_replace(''', ''', htmlspecialchars($text, ENT_QUOTES, 'utf-8'));
}
从spec看来,当你没有逃避数据的选择时,CDATA似乎只是一个可行的解决方案 - 但你仍然相信它。例如,来自您博客的RSS源(由于某种原因导致无法转义实体)。
答案 0 :(得分:2)
CDATA只是保持原始文本不变的标准方式,这意味着无论应用程序进程如何,XML都不需要采取任何明确的操作来进行unescape。
当您使用保留符号时,通常使用嵌入在XHTML中的JavaScript来实现这一点:
<script type="text/javascript">
//<![CDATA[
var test = "<This is a string with reserved characters>";
if (1 > 0) {
alert(test);
}
//]]>
</script>
如果你有if (1 > 0)
,那么它必须明确地进行无意识(它没有)。它也更具可读性。
答案 1 :(得分:0)
这是第一个也是最重要的可读性功能。 XML和SGML之前最初的意思是人类可读 - 信不信由你: - ))
其次,对于一个好的解析器,它是一个perf功能。 ]]&gt;保证结束是实际的块结束,但除此之外它是一个blob。
通过本书解析器还应保留节点表示的info / attrib,以跟踪它是否具有显式CDATA,并且永远不会触及其中的单个字符。