如何在CDATA中保留不被解析的标记标签内容?
<b>**bold text**</b>的正确方案 要实现在支持CDATA的应用中原样显示字符串 <b>**bold text**</b>,需要解决两个核心问题:避免标签被HTML解析,同时不让转义符残留。先分析你之前尝试的问题:
第一种写法:
<![CDATA[<b><b>bold text</b></b>]]>
CDATA的特性是原样输出内部内容,所以里面的<不会被转译为<,直接显示成<b>**bold text**</b>,不符合需求。第二种写法:
<![CDATA[<b><b>bold text</b></b>]]>
如果你的应用在读取CDATA后,会对内容进行二次HTML解析,那么<b>标签会被渲染为加粗样式,导致仅显示加粗后的文本,丢失了标签本身。
可行解决方案
方案1:使用零宽空格打断标签结构
在<和标签名之间插入零宽空格(Unicode编码​),既不会影响视觉显示,又能避免应用将其识别为有效HTML标签:
<![CDATA[<​b>**bold text**<​/b>]]>
最终显示效果为:<b>**bold text**</b>,且标签不会被解析。
方案2:结合CDATA与实体转义(针对不二次解析CDATA的应用)
如果你的应用只会读取CDATA内容作为纯文本,不会额外解析HTML,可直接在CDATA内部使用HTML实体转义<和>,确保内容原样输出:
<![CDATA[<b>**bold text**</b>]]>
此时应用会将<转译为<,最终显示为目标字符串。
方案3:将CDATA作为代码块展示(适合参考手册场景)
如果是做CDATA参考手册,直接将整个CDATA代码块放在代码标签中,同时对代码块内的<和>进行转义,确保浏览器/应用将其作为纯代码展示:
<pre><code><![CDATA[<b>**bold text**</b>]]></code></pre>
这样用户看到的就是完整的CDATA示例代码,包含<![CDATA[...]]>结构和内部的目标字符串。
内容的提问来源于stack exchange,提问作者Ford F150 Gaming

