javascript - 如何不解析<stdio.h>这样的字符串?
PHPz
PHPz 2017-04-10 14:37:11
[JavaScript讨论组]

我使用pre显示代码

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

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

PHPz
PHPz

学习是最好的投资!

全部回复(3)
伊谢尔伦

&lt;stdio.h&gt;

大家讲道理

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

  • 玉伯的文章
  • whatwg的相关标准
阿神

我是这样做的

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

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号