如何阻止这个json逃避html?

时间:2011-03-29 15:58:25

标签: c# html ajax json

我有一个返回用户评论的ajax控件。它由c#ajax处理程序页面提供,c#匹配用户可以在评论中留下的时间跨度:

commmentToDisplay = Regex.Replace(c.CommentText, timeSpanRegex, "<a href=\'\' onclick=\'alert(\'Flash Required\');\'>" + actualTimeSpan + "</a>");

这会生成以下json:

 ({
     "numOfPages":"1",
     "pageIndex":"1",
     "comments": [
         {
             "user":"hmladmin",
             "created":"29/03/2011 16:41:20",
             "id":"1",
             "comment":"<a href='' onclick='alert('Flash Required');'>00:00:21</a>",
             "editable":"true",
             "reportable":"true"
         }
]
})

当我在firebug中查看html时,它会出现这样的错误:

<a );="" required="" flash="" onclick="alert(" href="">00:00:21</a>

我试过了:

commmentToDisplay = Regex.Replace(c.CommentText, timeSpanRegex, "<a href=\'\' onclick=\'alert(\"Flash Required\");\'>" + actualTimeSpan + "</a>");

commmentToDisplay = Regex.Replace(c.CommentText, timeSpanRegex, "<a href=\'\' onclick=\"alert(\"Flash Required\");\">" + actualTimeSpan + "</a>");

我的多个排列无法解决如何让json和c#在onclick事件中返回带有警报消息的锚标记。

有人可以帮我弄清楚我是如何正确地逃避这一问题所以这个问题不会发生。

2 个答案:

答案 0 :(得分:1)

你在'alert('Flash Required');'中有嵌套的单引号,这将无效。您需要将一个集合更改为双引号,然后为JSON转义它们(\")。例如'alert(\"Flash Required\");'

答案 1 :(得分:1)

问题是当你创建HTML字符串并且与JSON无关时:

"<a href=\'\' onclick=\'alert(\'Flash Required\');\'>" + actualTimeSpan + "</a>"

应该是:

'<a href="something-sensible.html" onclick="alert(&quot;Flash Required&quot;); return false;">' + actualTimeSpan + '</a>'