如何在textbox或textarea中显示单引号和双引号

时间:2013-08-05 17:02:50

标签: html asp.net-mvc-3 knockout.js html-entities html-encode

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

数据字符串。

A'B"C

当它显示在textboxtextarea时,它会自动编码为html实体。

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

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

呈现HTML。

A'B"C

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

我尝试将双引号编码为"

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

但那给了我:

A'B"C

1 个答案:

答案 0 :(得分: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()));