【发布时间】:2012-02-25 12:50:10
【问题描述】:
基本上我有一些可能包含 HTML 标记但也可能包含非 HTML 编码字符的文本。
var doc = window.document.implementation.createDocument
('http://www.w3.org/1999/xhtml', 'html', null);
var text = '<head><script>somejs</script>' +
'<script>var x = 7; var y = 5; var foo = x < y;</script>' +
'</head><body></body>');
我希望将文本设置为元素的 innerHTML 属性。如果我只是这样做
doc.getElementsByTagName('html')[0].innerHTML = text;
这会导致 INVALID_STATE_ERR: DOM Exception 11,因为 x 和 y 之间有小于号。
但是,如果我 htmlEncode 我得到的可变文本
<head><script>somejs</script><script>var x = 7; var y = 5; var foo = x < y;</script></head><body></body>
因此,一旦设置了它的 innerHTML,我就丢失了该元素所需的所有标签。是否有任何标准方法可以对字符串中所有标签的内容进行 htmlencode 而无需对标签本身进行编码?
【问题讨论】:
-
使用
escape和unescape得到你的结果。 -
不幸的是,它转义了整个字符串,因此如果我想执行类似 doc.getElementsByTagName('script') 之类的操作,我将一无所获,因为构成脚本标签的 已被转义。
标签: javascript innerhtml html-encode