1

在数据库中,数据字符串中同时包含单引号和双引号。

数据字符串。

A'B"C

当它以textboxor显示时textarea,它会自动编码为 html 实体。

MVC视图中的代码,vm是与knockout绑定的对象。

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

呈现的 HTML。

A'B"C

如何使它们再次显示为单引号和双引号?

我试图将双引号编码为"

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

但这给了我:

A'B"C

4

1 回答 1

3

我想到了。我不得不转义双引号或单引号。

转义单引号:

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("&quot;", "\""))');

更新 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()));
于 2013-08-05T17:13:20.960 回答