11

有没有一种方法可以在 C# 中解码用 HttpUtility.JavaScriptStringEncode() 编码的字符串?

示例编码字符串:

<div class=\"header\"><h2>\u00FC<\/h2><script>\n<\/script>\n

我的临时解决方案是:

public static string JavaScriptStringDecode(string source)
{
    // Replace some chars.
    var decoded = source.Replace(@"\'", "'")
                .Replace(@"\""", @"""")
                .Replace(@"\/", "/")
                .Replace(@"\t", "\t")
                .Replace(@"\n", "\n");

    // Replace unicode escaped text.
    var rx = new Regex(@"\\[uU]([0-9A-F]{4})");

    decoded = rx.Replace(decoded, match => ((char)Int32.Parse(match.Value.Substring(2), NumberStyles.HexNumber))
                                            .ToString(CultureInfo.InvariantCulture));

    return decoded;
}
4

3 回答 3

0

不,您必须自己实施。原因是这种方法没有有意使用!对于您可能想要实现的目标,为什么不直接使用

HttpServerUtility.HtmlEncode(...)

HttpServerUtility.HtmlDecode(...)
于 2013-02-20T15:24:06.093 回答
0

你可以使用

HttpUtility.UrlDecode

http://msdn.microsoft.com/en-us/library/system.web.httputility.urldecode(v=vs.110).aspx

也在这里回答:Unescape JavaScript's escape() using C#

但是,UrlDecode 对某些字符(如 + 符号,javascript 不会取消转义)和任何字符值 >= 128 有一些重大限制。使用 Microsoft.JScript.GlobalObject.unescape 可能是最可靠的,但我不知道它的性能如何(即支持语言是什么。我想它很快,因为此时它是一个库)。

于 2014-12-13T22:37:20.457 回答
0

我使用 HttpUtility.UrlEncode 而不是 HttpUtility.JavaScriptStringEncode,然后是 HttpUtility.UrlDecode。

于 2020-11-12T06:06:43.860 回答