0

この文字列:<a onclick="doit('&#39;')">...</a>サーバー側から受信し、要素の内部 HTML として設定する必要があります。

を使用するElement#setInnerHTMLと、文字列が に変換され<a onclick="doit(''')">...</a>ます。つまり、HTML エンティティをそれが表す文字にエスケープ解除します。

エンティティ変換なしで内部 HTML 割り当てを実行するにはどうすればよいですか?

明確化: 内部 HTML 割り当ては、属性値内のエンティティのみをエスケープ解除します。

4

1 に答える 1

2

のソース コードsetInnerHTML()を調べるとわかるように、実装自体は問題を引き起こしません。Element

public final native void setInnerHTML(String html) /*-{
    this.innerHTML = html || '';
}-*/;

問題はブラウザー内にあり、無邪気に HTML ドキュメント表現仕様の Charset Entity References ガイドに従い、属性ノード内で許可されている (したがって解析される) エンティティを解析してます

仕様から:

&amp;CDATA 属性値内では文字参照が許可されているため、作成者は属性値でも " " を使用する必要があります。

解決

サーバー側で (またはフィルターまたは指定されたクライアント プロキシを介して)、属性値内のすべての特殊文字を、対応する HTML エンティティでエスケープします。

<a onclick=\"doit('&amp;#39;')\">...</a>

W3C に関する参考文献

于 2012-07-18T19:54:40.313 に答える