2013-08-05 129 views
1

在數據庫中,數據字符串中包含單引號和雙引號。如何在文本框或文本區中顯示單引號和雙引號

數據字符串。

A'B"C

當它顯示在textboxtextarea,它會自動編碼爲HTML實體。

MVC視圖中的代碼,vm是與knockout綁定的對象。

vm.field1('@Model.field1');

渲染HTML。

A'B"C

如何讓他們都再次顯示爲單引號和雙引號?

我試着雙引號編碼爲"

vm.field1("Html.Raw(Model.field1.Replace("\"", """))");

但是,這給了我:

A'B"C

回答

2

我想通了。我不得不逃避雙引號或單引號。

逃逸單引號:

vm.field1('@Html.Raw(Model.field1.Replace("'", "\\\'"))');

或逃避雙引號:

vm.field1("@Html.Raw(Model.field1.Replace("\"", "\\\""))")

更新

我發現有安全問題,我原來的解決方案。 如果輸入是A'B'C</SCRIPT>,它會打破頁面上的javascript。 要解決這個問題,我的HTML編碼除了單引號和雙引號之外的所有內容。

vm.field1('Html.Raw(Html.Encode(Model.field1).Replace("&#39", "\\\'").Replace("&quote;", "\""))'); 

更新2

我發現AntiXss庫有一些工具,這一點,我發現這會更好。

public static class StringExtensions 
{ 
    public static string ToQuotedJsString(this string s) 
    { 
     return Micorosoft.Security.Application.Encoder.JavaScriptEncode(s, true); 
    } 
} 

然後在視圖:

vm.field1(@Html.Raw(Model.field1.ToQuotedJsString())); 
+0

在第一個 「更新」 改變 「"e;」 到 「"」 – PanKak