c# - 是否有一种标准方法可以将 .NET 字符串编码为 JavaScript 字符串以便在 MS Ajax 中使用?

标签 c# javascript asp.net ajax encoding

我正在尝试使用 .NET 3.5 中 MS ScriptManager 的 RegisterStartUpScript 方法将 SQL Server 异常的输出传递给客户端。这对于某些错误工作正常,但当异常包含单引号时,警报失败。

不过我不想只转义单引号。有没有我可以调用的标准函数来转义在 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();
    }
}

如下所述 - 原始来源:here

最佳答案

你看过HttpUtility.JavaScriptStringEncode了吗? ?

关于c# - 是否有一种标准方法可以将 .NET 字符串编码为 JavaScript 字符串以便在 MS Ajax 中使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2920752/

相关文章:

c# - 如何检查代码文件的有效性?

c# - 警告 NETSDK1071 对 'Microsoft.AspNetCore.App' 的 PackageReference 指定了 `2.1.6` 的版本

javascript - AJAX 错误 : TypeError: 'arguments' , 'callee' 和 'caller' 无法在此上下文中访问

javascript - 在不超过堆栈限制的情况下迭代或递归大量庞大函数的最佳方法是什么?

c# - 在 ASP.NET 中拆分数据

c# - 如何在 ASP.NET 中找到选定的 RadioButton 的值?

c# - Windows 10 蓝牙低功耗连接 c#

javascript - jQuery 显示和隐藏在 iPad 或 iPhone 上不起作用

asp.net - 使用 Azure AD 进行 SSO 时,Microsoft 如何使用 Post 方法重定向到客户端应用程序

c# - ASP.NET 数据集 getdataBy 无法启用约束。一行或多行包含违反非空、唯一或外键约束的值