此字符串:<a onclick="doit(''')">...</a>
从服务器端接收,需要设置为元素的内部 HTML。
当我使用Element#setInnerHTML
字符串被转换为 时<a onclick="doit(''')">...</a>
,即将 HTML 实体转义为它所代表的字符。
如何在没有实体转换的情况下执行内部 HTML 分配?
澄清:内部 HTML 分配仅取消转义属性值内的实体。
此字符串:<a onclick="doit(''')">...</a>
从服务器端接收,需要设置为元素的内部 HTML。
当我使用Element#setInnerHTML
字符串被转换为 时<a onclick="doit(''')">...</a>
,即将 HTML 实体转义为它所代表的字符。
如何在没有实体转换的情况下执行内部 HTML 分配?
澄清:内部 HTML 分配仅取消转义属性值内的实体。
setInnerHTML()
实现本身没有问题,因为它的唯一作用是为底层 JS 对象分配一个属性值,通过检查 的源代码可以看出Element
:
public final native void setInnerHTML(String html) /*-{
this.innerHTML = html || '';
}-*/;
问题出在浏览器中,无辜地遵循HTML 文档表示规范中的字符集实体引用指南并解析您的实体,这些实体在属性节点内是允许的(因此被解析)。
作者还应该在属性值中使用“
&
”,因为在 CDATA 属性值中允许字符引用。
在服务器端(或通过过滤器或指定的客户端代理),使用相应的 HTML 实体转义属性值内的所有特殊字符,例如:
<a onclick=\"doit('&#39;')\">...</a>