有没有一个标准的方法来编码一个.NETstring为JavaScriptstring在MS Ajax中使用?

我试图在.NET 3.5中使用MS ScriptManager的RegisterStartUpScript方法将SQL Serverexception的输出传递给客户端。 这适用于某些错误,但是当exception包含单引号时,警报将失败。

我不想只逃避单引号。 有没有一个标准的函数,我可以调用转义任何特殊的字符用于JavaScript?

 string scriptstring = "alert('" + ex.Message + "');"; ScriptManager.RegisterStartupScript(this, this.GetType(), "Alert", scriptstring , true); 

编辑

感谢@ tpeczek,代码几乎为我工作:)但略有修改(逃避单引号)它的作品。

我在这里包括我的修改版本…

 public class JSEncode { /// <summary> /// Encodes a string to be represented as a string literal. The format /// is essentially a JSON string. /// /// The string returned includes outer quotes /// Example Output: "Hello \"Rick\"!\r\nRock on" /// </summary> /// <param name="s"></param> /// <returns></returns> public static string EncodeJsString(string s) { StringBuilder sb = new StringBuilder(); sb.Append("\""); foreach (char c in s) { switch (c) { case '\'': sb.Append("\\\'"); break; case '\"': sb.Append("\\\""); break; case '\\': sb.Append("\\\\"); break; case '\b': sb.Append("\\b"); break; case '\f': sb.Append("\\f"); break; case '\n': sb.Append("\\n"); break; case '\r': sb.Append("\\r"); break; case '\t': sb.Append("\\t"); break; default: int i = (int)c; if (i < 32 || i > 127) { sb.AppendFormat("\\u{0:X04}", i); } else { sb.Append(c); } break; } } sb.Append("\""); return sb.ToString(); } } 

如下所述 – 原始来源: 在这里

你有没有看过HttpUtility.JavaScriptStringEncode

具有此function的探针是,它不会对封装HTML中通常是带外的字符进行编码…因此,如果尝试在"属性值内"包含string,或者如果您在脚本元素中有一个带有序列</script>的string,这可能会导致脚本注入和XSS。

你可以添加:

  case '<': sb.Append("\\x3C"); break; case '"': sb.Append("\\x22"); break; case '&': sb.Append("\\x26"); break; 

一般来说,使用标准的JSON编码器比酿造自己的JSstring文字编码器更好。 这将允许您将任何简单的数据types传递给JS,而不仅仅是string。

在.NET 3.5中,你得到了JavaScriptSerializer ,但是请注意,虽然编码< to \u003C (所以输出将适合在<script>元素中使用),但它不会编码&" ,所以HTML转义需要将这样的内容包含在属性值中,并且XHTML脚本元素将需要CDATA包装器。

(与许多JSON编码器一样,它也不能编码U + 2028 LINE SEPARATOR和U + 2029 PARALPARP SEPARATOR字符,因为转义了所有非ASCII字符,所以上面的代码确实会造成'未终止的string'错误这些字符包含在一个JSstring文字中,因为JavaScript不会像ASCII换行符那样把它们看作是相同的。)

这是一个旧线程,但是您可能有兴趣了解Microsoft AntiXSS库,它具有适用于.Net 2的Javascript编码方法。

http://msdn.microsoft.com/en-gb/security/aa973814.aspx