6

ASP.NETを使用していて、データベースにHTMLの文字列があります。

そのhtmlをクライアントの変数に入れたいです。

私がこれを行う場合:

var x = '@Html.Raw(myModel.FishValue)'

それは本質的にやっているので、それはうまくいきます

var x = '<p>hello!</p>';

ただし、htmlに引用符があると、ページが壊れます。

私の最初の推測は、引用符にエスケープを追加するために生の文字列を置き換えることですが、.ToString().ToHtmlString()(Html.RawはIHtmlStringを返すため)の両方は、単純なものと同じマークアップを生成しませんHtml.Raw()

だから私は何をすべきか途方に暮れています。

4

3 に答える 3

10

Html.Rawメソッドを呼び出す前に置き換えるのはどうですか?

 var x = '@Html.Raw(myModel.FishValue.Replace("'","\\'"))' 

アップデート:

モデルからの文字列に他のエスケープ文字が含まれている可能性があります。そのため、最初にスラッシュも交換することをお勧めします。もちろん、それはすべて、モデル内のサーバーから何がもたらされるかによって異なります。

 var x = '@Html.Raw(myModel.FishValue.Replace("\\","\\\\'").Replace("'","\\'"))' 

javascriptの動作を表すサンプルスニペット:

//Let's say my Model Content is >  I'd Say \ is a escape character. You can't "Escape"  
    // YOu would have to replace ' --> \' and \ --> \\
    var stringFromServer = 'I\'d Say \\ is a escape character. You can\'t "Escape"'
    alert(stringFromServer)

于 2012-04-04T16:18:06.037 に答える
1

これを試して:

var x = '@(System.Web.HttpUtility.HtmlEncode(myModel.FishValue))';

クライアント側でHTMLをデコードする必要がある場合は、

unescape(x)

JQuery(使用しているかどうかはわかりません)はエンコードされたHTML文字列を処理するため、unescape()は必要ないと思います。

于 2012-04-04T16:22:33.257 に答える
1

Microsoftのanti-xssライブラリを試してみてください(これは、asp.net 4.5にデフォルトで含まれていると思います)。

AntiXss.JavascriptEncode(yourContent)

Anti-Xssは4.1ベータ版で利用できます。私が強くお勧めするアプリケーションで使用したい場合は、 http ://weblogs.asp.net/jgalloway/archive/2011/04/28/using-antixss-4-1-beta-as-theをチェックしてください。 -default-encoder-in-asp-net.aspx

于 2012-04-04T16:27:13.243 に答える