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

12
有没有一种方法可以解码使用HttpUtility.JavaScriptStringEncode()在C#中编码的字符串?
示例编码字符串:
<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个回答

1
你可以使用

标签。

HttpUtility.UrlDecode

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

这里也有答案:使用C#解码JavaScript的escape()函数返回的字符串

但是,UrlDecode在某些字符(例如+号,JavaScript无法反转义)和任何大于等于128的字符值上具有一定的限制。使用Microsoft.JScript.GlobalObject.unescape可能是最可靠的方法,但我不知道它的性能如何(即支持语言是什么,我想它是快速的,因为它现在是一个库)。


0
System.Text.Json.JsonSerializer.Deserialize(string json)会帮你完成这个任务,除非原始字符串为null,否则它会返回""。在使用之前,请不要忘记将编码后的字符串放在双引号内。HttpUtility.JavaScriptStringEncode(str,true)的重载会自动完成这个任务。

你的回答可以通过提供更多的支持性信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的回答是否正确。你可以在帮助中心找到关于如何撰写好回答的更多信息。 - undefined

0

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


0
不,你必须自己实现。原因是这种方法没有预期的用途!为了你可能想要实现的目标,为什么不直接使用呢?
HttpServerUtility.HtmlEncode(...)

并且

HttpServerUtility.HtmlDecode(...)

预期用途是网页内容解析器。我不拥有该内容。 - Samet S.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接