如何解码用 JavaScriptStringEncoded 编码的字符串?
Posted
技术标签:
【中文标题】如何解码用 JavaScriptStringEncoded 编码的字符串?【英文标题】:How to decode a string encoded with JavaScriptStringEncoded? 【发布时间】:2013-02-05 15:14:45 【问题描述】:有没有一种方法可以在 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;
【问题讨论】:
【参考方案1】:不,您必须自己实现。原因是这种方法没有有意使用!对于您可能想要实现的目标,为什么不直接使用
HttpServerUtility.htmlEncode(...)
和
HttpServerUtility.HtmlDecode(...)
【讨论】:
预期用途是网页内容解析器。我不拥有内容。【参考方案2】:你可以使用
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 可能是最可靠的,但我不'不知道它的性能如何(即支持语言是什么。我想它很快,因为此时它是一个库)。
【讨论】:
【参考方案3】:我使用 HttpUtility.UrlEncode 而不是 HttpUtility.JavaScriptStringEncode,然后 HttpUtility.UrlDecode。
【讨论】:
以上是关于如何解码用 JavaScriptStringEncoded 编码的字符串?的主要内容,如果未能解决你的问题,请参考以下文章
如何解码用 JavaScriptStringEncoded 编码的字符串?
如何使用java解码用openssl aes-128-cbc编码的字符串?