如何在没有在Javascript中编码标签本身的情况下对可能具有html标签的文本进行HTML编码

时间:2012-02-02 20:32:45

标签: javascript innerhtml html-encode

基本上我有一些文本可能包含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异常11,因为x和y之间的符号小于。

但是,如果我htmlEncode我得到的变量文本

&lt;head&gt;&lt;script&gt;somejs&lt;/script&gt;&lt;script&gt;var x = 7; var y = 5; var     foo = x &lt; y;&lt;/script&gt;&lt;/head&gt;&lt;body&gt;&lt;/body&gt;

因此,一旦设置了innerHTML,我就失去了元素所需的所有标记。有没有标准的方法来htmlencode字符串中所有标签的内容而不编码标签本身?

1 个答案:

答案 0 :(得分:0)

对于内联脚本you need to escape the string </script when followed by a space character, >, or /, else it would close the respective opening tag

因此,您可以使用</script>代替<\/script>。这有效:

var text = '<head><script>somejs<\/script><script>var x = 7; var y = 5; var foo = x < y;<\/script></head><body></body>';
el.innerHTML = text;

更新:现在你已经编辑了问题,我发现你正在使用XHTML!这解释了它 - innerHTML在XHTML中不起作用。