要符合“内部的html标签不被解析”,我们 根据HTML5的标准 ,分元素类别讨论吧:

  1. Void Elements,如 br 等。
    他们不允许有内部文本。
  2. Foreign Elements,如 svg mathml 的相关标签
    跟xml语法一致,他们内部文本若不想被当作标签解析,只有用 <![CDATA[ ]]> 包裹
  3. RCDATA elements:即 textarea title
    他们不能嵌套自身,内部的实体会被转义,内部的 < 不会被当作tag open解析。
    因此,他们内部的其他标签自然不会被解析。
  4. Raw text elements:即 script style
    他们不能嵌套自身,内部的实体不会被转义,内部的 < 不会被当作tag open解析。
    因此,他们内部的其他标签自然不会被解析。
  5. Normal elements,普通的元素,基本上上列没有提及的都属于这一列,包括 pre code
    他们的特点是,内部的实体会被转义,内部的 < 可能根据上下文,被当作tag open解析。
    他们内部的文本若想展示标签文本而不解析,必须先转义 < < > >

如果目标是让HTML标签文本内容正常显示而不被解析,最简单的方案是嵌入到 <script type="text/html"> <script type="text/template"> 内部,并加上 display: block 即可。

HTML4旧有的有 xmp listing plaintext 类似于HTML5的Raw text elements,可以包含标签而不解析,内部实体不被转义,但是已经在HTML5中废弃。

Eiko君 answered 11 years, 7 months ago

Your Answer