![]() |
1
190
编辑: Wladimir suggests ,我编辑了以前的答案,因为发布的函数引入了安全漏洞。
下面的代码片段是旧答案的代码,稍作修改:使用
基本上,我以编程方式创建DOM元素,将编码的HTML分配给其innerHTML,并从innerHTML插入时创建的文本节点检索nodeValue。因为它只是创建一个元素,但从不添加它,所以不会修改任何站点HTML。 它可以跨浏览器(包括旧的浏览器)工作并接受所有 HTML Character Entities . 编辑:这段代码的旧版本在输入为空的IE上不起作用 here on jsFiddle (在IE中查看)。以上版本适用于所有输入。 更新:这似乎不适用于大字符串,它还引入了 ,见注释。 |
![]() |
2
447
Cross-Site Scripting (XSS) vulnerability . 对于中的函数 accepted answer ,请考虑以下事项:
这里的字符串包含一个未转义的HTML标记,因此
DOMParser 中支持的 all modern browsers
此函数保证不会作为副作用运行任何JavaScript代码。任何HTML标记都将被忽略,只返回文本内容。
兼容性说明
|
![]() |
3
291
如果你只需要处理
|
![]() |
4
107
从JavaScript解释HTML(文本或其他)的一个更现代的选项是
如果我们只想解码一些文本内容,我们可以将其作为文档体中的唯一内容,解析文档,并提取其
我们可以看到
the draft specification for
这超出了这个问题的范围,但是 请注意 如果您将解析的DOM节点本身(不仅仅是它们的文本内容)移动到活动文档DOM中,那么它们的脚本可能会重新启用,并且可能存在安全问题。我还没有研究过,所以请谨慎行事。 |
![]() |
5
48
Matthias Bynens有一个图书馆: https://github.com/mathiasbynens/he 例子:
但是请注意安全问题,影响到与此类似的方法,我在链接答案中列出了这些问题!这种方法是一种黑客行为,将来可以修改
|
![]() |
6
39
如果您使用的是jQuery:
否则,请使用
Strictly Software's Encoder Object
,它有一个极好的
|
![]() |
7
22
这是来自ExtJS的源代码。 |
![]() |
8
17
|
![]() |
9
17
诀窍是使用浏览器的力量来解码特殊的HTML字符,但不允许浏览器执行的结果,如果它是实际的HTML。。。此函数使用正则表达式来标识和替换编码的HTML字符,每次一个字符。
|
![]() |
10
17
可以使用Lodash unescape/escape函数 https://lodash.com/docs/4.17.5#unescape
|
![]() |
11
14
如果你像我一样在找它的话-同时有一个很好而且安全的JQuery方法。 https://api.jquery.com/jquery.parsehtml/ 您可以在控制台中键入:
所以$.parseHTML(x)返回一个数组,如果文本中有HTML标记,则数组长度将大于1。 |
![]() |
12
8
jQuery将为您编码和解码。但是,您需要使用textarea标记,而不是div。
|
![]() |
13
6
看到这个答案了吗
|
![]() |
14
4
首先创建一个
接下来,将要解码为innerHTML的字符串分配给:
以下是总体代码:
|
![]() |
15
3
这不是对您的问题的直接回答,但是您的RPC返回一些结构(无论是XML还是JSON或其他什么)以及该结构中的图像数据(示例中的url)不是更好吗?
然后就可以在javascript中解析它并构建
我认为这样更好,因为将来自外部源代码的代码注入到页面看起来不太安全。想象一下有人劫持了你的XML-RPC脚本,把你不想要的东西放进去(甚至一些javascript…) |
![]() |
16
3
|
![]() |
17
2
Chris的答案很好,很优雅,但如果价值太高,它就失败了 未定义 . 只要简单的改进就可以让它变得坚实:
|
![]() |
18
2
一个javascript解决方案,可以捕获常见的解决方案:
|
![]() |
19
2
全额学分: https://ourcodeworld.com/articles/read/188/encode-and-decode-html-entities-using-pure-javascript |
![]() |
20
2
我疯了,把这个函数做得很漂亮,如果不是完全的话,也很详尽:
像这样使用:
印刷品:
顺便说一下,这花了一个半小时。 |
![]() |
21
2
这是我迄今为止尝试过的最全面的解决方案:
|
![]() |
22
2
这个问题没有具体说明
通过找到 https://gist.github.com/jmblog/3222899 . 我看不出有多少理由避免使用这个解决方案,因为它至少和某些替代方案一样短,甚至更短 防御XSS。 (我最初将此作为评论发布,但现在将其作为答案添加,因为同一线程中的后续评论要求我这样做)。 |
![]() |
23
1
我尝试了从JSON数组中删除&的所有操作。以上都不是例子,但是 https://stackoverflow.com/users/2030321/chris 给了我一个很好的解决方案,使我解决了我的问题。
我喜欢它,因为它很简单,而且很有效,但不知道为什么它没有被广泛使用。搜索hi&low以找到简单的解决方案。 我继续寻求对语法的理解,如果使用它有任何风险的话。还没有找到任何东西。 |
![]() |
24
1
要在JavaScript中取消显示HTML实体*,可以使用小型库
html-escaper
:
或者
*)请注意,这些函数并不涵盖所有的HTML实体,而是只涵盖最常见的实体,即。
|
![]() |
25
0
闭包可以避免创建不必要的对象。
|
![]() |
26
-1
我在我的项目中使用这个:灵感来自 other answers 但是如果有一个额外的安全参数,在处理修饰字符时可能会很有用
它的可用性如下:
|
![]() |
27
-1
其他答案都有问题。 这个文档.createElement('div')方法(包括那些使用jQuery的方法)执行传递给它的任何javascript(安全问题)和DOMParser.parseFromString()方法修剪空白。下面是一个纯javascript解决方案,它没有任何问题:
|
![]() |
28
-1
|
![]() |
29
-2
|
![]() |
30
-7
有一种变体,80%的效率与最高层的答案相当。https://jsperf.com/decode-html12345678/1
如果你需要留下标签,那就把这两个去掉
|
![]() |
Softly · 单选按钮未按预期取值 1 年前 |
|
SlickRed · 我无法使用JS关注HTML元素 1 年前 |
![]() |
assembler · Nextjs没有处理发布请求 1 年前 |
|
BADRUM · 执行两个获取功能后,如何导航回页面? 1 年前 |
![]() |
Toniq · javascript为php保存多维数组 1 年前 |