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

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

我使用pre显示代码

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

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


&lt;stdio.h&gt;


我是这样做的

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

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


什么字符是敏感的?何时使用<,何时使用&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

RCDATA elements

Normal elements


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

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

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


ref:

【热门文章】
【热门文章】