json 如何解码用JavaScriptStringEncoded编码的字符串?

gupuwyp2  于 2023-10-21  发布在  Java
关注(0)|答案(4)|浏览(96)

在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;
}
siv3szwd

siv3szwd1#

你可以用

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可能是最可靠的,但我不知道它的性能如何(即,支持语言是什么。我想它的速度很快,因为它是一个图书馆在这一点上)。

pprl5pva

pprl5pva2#

不,你必须自己实现它。原因是,这种方法根本没有意图!对于你可能试图实现的目标,为什么不直接使用

HttpServerUtility.HtmlEncode(...)

HttpServerUtility.HtmlDecode(...)
qzlgjiam

qzlgjiam3#

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

h43kikqp

h43kikqp4#

System.Text.Json.JsonSerializer. Serialize(string json)将为您执行此操作,但原始字符串为null的情况除外-它返回“”。不要忘记将编码后的字符串放在双引号内。HttpUtility.JavaScriptStringEncode(str,true)重载将自动执行此操作。

相关问题