使用 C# 对 JavaScript 的 escape() 进行转义
Posted
技术标签:
【中文标题】使用 C# 对 JavaScript 的 escape() 进行转义【英文标题】:Unescape JavaScript's escape() using C# 【发布时间】:2011-04-16 05:50:49 【问题描述】:C# 中的 any 函数是否像 javascript 一样处理转义/取消转义?
我有一个这样的 JSON 字符串:
"Feeds":["Url":"www.test.com","FeedType":"Twitter","Url":"www.test2.com","FeedType":"Youtube"]
escape()
之后的样子
%7B%22Feeds%22%3A%5B%7B%22Url%22%3A%22www.test.com%22%2C%22FeedType%22%3A%22Twitter%22%7D%2C%7B%22Url%22%3A%22www.test2.com%22%2C%22FeedType%22%3A%22Youtube%22%7D%5D%7D
在我的 C# 代码中,我想取消转义该字符串,使其看起来与 escape()
之前完全相同
这可能吗?
【问题讨论】:
【参考方案1】:这是我发现使用这些的最佳方式:
用 C# 编码:
System.Uri.EscapeDataString("<string>");
用 JavaScript 解码:
decodeURI("<string>");
用 JavaScript 编码:
encodeURI("<string>");
用 C# 解码:
System.Uri.UnescapeDataString("<string>");
2016 年 1 月 27 日更新:刚刚发现似乎更兼容的方式,它还使用 javascript 对 URI 协议 (http://) 进行编码:
用 JavaScript 编码:
encodeURIComponent("<string>");
用 JavaScript 解码:
decodeURIComponent("<string>");
【讨论】:
【参考方案2】:要取消转义而不必引用 System.Web 以使用 HttpUtility,请尝试以下操作:
Str = Str.Replace("+", " ");
Str = Regex.Replace(Str, "%([A-Fa-f\\d]2)", a => "" + Convert.ToChar(Convert.ToInt32(a.Groups[1].Value, 16)));
另外,当我尝试 HttpUtility.UrlDecode 时,它不适用于特殊字符 áéíóúñ。
【讨论】:
【参考方案3】: internal static string UnJavascriptEscape(string s)
// undo the effects of JavaScript's escape function
return HttpUtility.UrlDecode(s.Replace("+", "%2b"), Encoding.Default);
【讨论】:
【参考方案4】:我花了 8 个小时试图得到 p>
HttpUtility.UrlDecode
工作,放弃使用
HttpUtility.htmlDecode
立即生效。
【讨论】:
【参考方案5】:天啊,为什么我们有时会想太多。 当一个 API 函数很傻时,向库开发人员发送 karma cuss,然后解决它...
HttpUtility.UrlEncode(editext, System.Text.Encoding.Default).Replace("+","%20");
【讨论】:
【参考方案6】:escape()
等价于
HttpUtility.UrlDecode(str, System.Text.Encoding.Default);
默认情况下,UrlDecode
使用 UTF8,而 escape()
不使用。
【讨论】:
UTF8 向后兼容 ASCII,因此,除非我误解了某些内容,否则您不必传入编码。 这是错误的……escape()实际上相当于HttpUtility.UrlDecode(str, Encoding.Default)
,这意味着两件事:①它取决于你的系统区域设置; ② 它是 1990 年代过时的 8 位技术,与 UTF-8 不兼容。 (不过第二段是正确的。)
@Justin Niessner:正如你所说,它落后了compatible
。不等价。而且我想强调backward
,甚至不认为它与其他方式兼容。
HttpUtility.UrlDecode(msg, System.Text.Encoding.Default);实际上对我有用
对于带有特殊字符的语言,这可以解决问题,谢谢先生【参考方案7】:
HttpUtility.UrlDecode
应该可以解决问题。
【讨论】:
@Timwi - 你是对的。我读错了。更新。只是出于好奇,您为什么使用自己的代码(现已删除)来做同样的事情,而不是重新使用 .NET 提供的代码? 谢谢,我尝试了HttpUtility.HtmlDecode
,但它没有用,但是当我看到你的回答时,我发现UrlDecode
做了HtmlDecode
没有做的事情。
这不处理“+”字符。 (尝试在“abc+def”上使用 UrlDecode,它似乎将 + 替换为空格。)我暂时使用 Microsoft.JScript.GlobalObject.unencode() 但我讨厌为此引入依赖项......跨度>
"+" 是 URL 中的空格字符。这也取决于编码器。在 JavaScript 中,您想使用 encodeURIComponent 而不是 escape,它也包含 + 字符。
这没有正确解码瑞典语字符 - å 被转义为 %E5 并解码为:�以上是关于使用 C# 对 JavaScript 的 escape() 进行转义的主要内容,如果未能解决你的问题,请参考以下文章
使用 C# 对 JavaScript 的 escape() 进行转义
escape()encodeURI()encodeURIComponent()区别详解
escape()encodeURI()encodeURIComponent()区别详解