如何不解析<stdio.h>这样的字符串?

ggaaooppeenngg
  • 119

我使用pre显示代码

code = "#include <stdio.h> int main(){printf("hello world!\n")}"
$(this).html("<pre>"+code+"</pre>");

带是html会把<stdio.h>解析成一个标签,整个代码就乱了,有什么办法不解析这一部分么.

回复
阅读 3.4k
3 个回答
✓ 已被采纳

&lt;stdio.h&gt;

Humphry
  • 16.4k

什么字符是敏感的?何时使用<,何时使用&lt;

要理解这个问题,需要先了解一下HTML构建文档树时期,Tokenize过程中需要被差别对待的五类元素:

  1. Void elements:内部不包含文本,即area, base, br, col, embed, hr, img, input, keygen, link, menuitem, meta, param, source, track, wbr
  2. Raw text elements:即scriptstyle.
  3. RCDATA elements:即textareatitle.
  4. Foreign elements:一些来自 MATHMLSVG 的元素。
  5. Normal elements,以上四种类型之外的其他元素。

1没有内部文本,4超出了讨论范围,其他元素内部文本的解析规则各不相同:

Raw text elements

  • < 就表示 <字符本身,不会被当作 tag open 来解析
  • &lt; 不会根据实体字符来转义
  • 内部文本不能包含</script></style>

RCDATA elements

  • < 就表示 <字符本身,不会被当作 tag open 来解析
  • &lt;会被转义为<
  • 内部文本不能包含</textarea></title>

Normal elements

  • <会被当作 tag open 来解析
  • &lt;会被转义为<

总结出一个元素内部-输入-输出表格既是:

元素 输入< 输入&lt; 输入&gt;
script内部 < &lt; &gt;
style内部 < &lt; &gt;
title内部 < < >
textarea内部 < < >
[Normal elements]内部 TAG OPEN < >

所以,在<pre>(即Normal Element)内部,<被解析作Tag Open,因此需要额外转义。


ref:

我是这样做的

$("<pre></pre>").appendTo(this);
$("pre").text(code);

在我的上下文里面是满足了……

宣传栏