2

&lt;script&gt;alert('injection');&lt;/script&gt;ASP MVC3 アプリケーションで jquery テンプレートとしてレンダリングされるビューにそのままレンダリングしたいテキストがあります。しかし、&lt;と表示され<ます。

私のjqueryテンプレートは以下の通りです:

<script id="nameTemplate" type="text/x-jquery-tmpl">
    <p>${Name}</p>
</script>

どうすればそれをプレーンテキストとしてレンダリングできますか?

4

2 に答える 2

1

SpaceBison が示唆しているように、ブラウザは HTML エンコードされた値をデコードし、それらを「プレーンテキスト」HTML として書き出します。

値をencodedに書き出すには、値を効果的に「二重エンコード」する必要があるため、ブラウザーがデコードしてレンダリングするときに、値は 1 回エンコードされます。

値がもともと ASP.NET MVC モデル プロパティなどから取得されたものである場合 (タグに基づいていると仮定)、HttpUtility.HtmlEncodeサーバー側のコードで次のように使用できます。

Model.Name = HttpUtility.HtmlEncode(Model.Name);

ただし、フロントエンドでこれを行う必要がある場合は、単純な jQuery 関数を記述して値をエンコードできます (恥知らずにこの回答から盗みました)。

function HtmlEncode(str) {
    return String(str)
        .replace(/&/g, '&amp;')
        .replace(/"/g, '&quot;')
        .replace(/'/g, '&#39;')
        .replace(/</g, '&lt;')
        .replace(/>/g, '&gt;');
}

アイテムをコンテナーに追加する前に、jQuery で次の操作を実行できます。

Name = HtmlEncode(Name);

実際の動作を確認するには: http://jsfiddle.net/Rb2VJ/1/

于 2013-03-27T17:54:11.433 に答える
0

&amp;文字通り取得するには、使用します&amp;lt;

$(elem).text("&lt;");また、プレーンテキストとして表示します。

$(elem).html("&amp;lt;");HTML用。

http://jsfiddle.net/yCuZt/

于 2013-03-27T09:54:37.950 に答える