我使用pre显示代码
code = "#include <stdio.h> int main(){printf("hello world!\n")}"
$(this).html("<pre>"+code+"</pre>");
带是html会把<stdio.h>
解析成一个标签,整个代码就乱了,有什么办法不解析这一部分么.
我使用pre显示代码
code = "#include <stdio.h> int main(){printf("hello world!\n")}"
$(this).html("<pre>"+code+"</pre>");
带是html会把<stdio.h>
解析成一个标签,整个代码就乱了,有什么办法不解析这一部分么.
什么字符是敏感的?何时使用<
,何时使用<
?
要理解这个问题,需要先了解一下HTML构建文档树时期,Tokenize过程中需要被差别对待的五类元素:
area
, base
, br
, col
, embed
, hr
, img
, input
, keygen
, link
, menuitem
, meta
, param
, source
, track
, wbr
script
和 style
.textarea
和 title
.MATHML
和 SVG
的元素。1没有内部文本,4超出了讨论范围,其他元素内部文本的解析规则各不相同:
<
就表示 <
字符本身,不会被当作 tag open 来解析<
不会根据实体字符来转义</script>
和</style>
<
就表示 <
字符本身,不会被当作 tag open 来解析<
会被转义为<
</textarea>
和 </title>
<
会被当作 tag open 来解析<
会被转义为<
总结出一个元素内部-输入-输出
表格既是:
元素 | 输入< | 输入< | 输入> |
script内部 | < | < | > |
style内部 | < | < | > |
title内部 | < | < | > |
textarea内部 | < | < | > |
[Normal elements]内部 | TAG OPEN | < | > |
所以,在<pre>
(即Normal Element)内部,<
被解析作Tag Open,因此需要额外转义。
ref:
13 回答12.7k 阅读
7 回答1.8k 阅读
3 回答1.1k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
6 回答775 阅读✓ 已解决
2 回答1.9k 阅读
6 回答1k 阅读
<stdio.h>