6

我正在使用 ASP.NET,并且我在数据库中有一个 HTML 字符串。

我想将该 html 放入客户端上的变量中。

如果我这样做:

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

它工作正常,因为它本质上是在做

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

但是,如果 html 中有引号,它会破坏页面。

我最初的猜测是 .Replace 原始字符串以将转义添加到引号中,但是.ToString()and .ToHtmlString()(因为 Html.Raw 返回 IHtmlString)都不会产生与 simple 相同的标记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 beta 可用。如果您想在我强烈推荐的应用程序中使用它,请查看: 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 回答