3

我想通过注册一个脚本来显示我的asp.net页面中的消息,有时甚至是来自错误的异常代码。我使用这段代码:

ScriptManager.RegisterStartupScript(this, Page.GetType(), "NoDept", "alert('Adjustments require the Total Amount to be ZERO to post!');", true);

如果我可以决定在开发过程中显示的信息,这非常有用,但是如果我想显示来自应用程序的数据,它可能包含无效文本,这当然会破坏脚本并且它不会显示。例如,消息中带有 ' 的内容。

当我尝试显示来自异常的消息时遇到了问题,例如:

ScriptManager.RegisterStartupScript(this, Page.GetType(), "processError", "alert('" + ptcred.TransactionError + "');", true);

ptcred.TransactionError 是 ASP.NET 异常错误,它可能包含无效字符。

在我的 alert() 函数中处理不会搞砸我的 javascript 的此信息的最佳方法是什么?jQuery 可以做些什么来清理它?

编辑:我应该解释一下,我想继续轻松地注册一个警报脚本,它简单方便。只是想知道是否有类似 HTML.Encode 之类的东西或可以清理信息的东西,这将使消息不会搞砸脚本。

谢谢,科里

4

2 回答 2

3

您需要转义任何引号字符。

Regex.Replace(ptcred.TransactionError, "(\"|\')", "\\$1");
于 2013-03-29T19:02:39.653 回答
3

您可以调用HttpUtility.JavaScriptStringEncode方法(在 ASP.NET 4.0 中引入):

ScriptManager.RegisterStartupScript(
    this, Page.GetType(), "processError",
    "alert('" + HttpUtility.JavaScriptStringEncode(ptcred.TransactionError) + "');",
    true);

Caution: If TransactionError might contain user-entered data, then it's extremely important that you correctly encode it, like above. Otherwise, you may introduce a security vulnerability and expose your application to cross-site scripting (XSS) attacks. I don't know if ChaosPandion's answer (escaping single and double quotes) is sufficient to avoid XSS.

于 2013-03-29T21:28:01.057 回答