在数据库中,数据字符串中包含单引号和双引号。
数据字符串。
A'B"C
当它显示在textbox
或textarea
时,它会自动编码为html实体。
MVC视图中的代码,vm
是与淘汰赛绑定的对象。
vm.field1('@Model.field1');
呈现HTML。
A'B"C
如何让它们再次显示为单引号和双引号?
我尝试将双引号编码为"
:
vm.field1("Html.Raw(Model.field1.Replace("\"", """))");
但那给了我:
A'B"C
答案 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("'", "\\\'").Replace(""", "\""))');
更新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()));