在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条答案
按热度按时间siv3szwd1#
你可以用
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可能是最可靠的,但我不知道它的性能如何(即,支持语言是什么。我想它的速度很快,因为它是一个图书馆在这一点上)。
pprl5pva2#
不,你必须自己实现它。原因是,这种方法根本没有意图!对于你可能试图实现的目标,为什么不直接使用
和
qzlgjiam3#
我使用HttpUtility.UrlEncode而不是HttpUtility.JavaScriptStringEncode,然后是HttpUtility.UrlDecode。
h43kikqp4#
System.Text.Json.JsonSerializer. Serialize(string json)将为您执行此操作,但原始字符串为null的情况除外-它返回“”。不要忘记将编码后的字符串放在双引号内。HttpUtility.JavaScriptStringEncode(str,true)重载将自动执行此操作。