Pri*_*iya 9 c# asp.net urlencode url-encoding
我需要传递#,!等特殊字符 在Facebook,Twitter和此类社交网站的URL中等.为此,我用URL Escape Codes替换这些字符.
return valToEncode.Replace("!", "%21").Replace("#", "%23")
.Replace("$", "%24").Replace("&", "%26")
.Replace("'", "%27").Replace("(", "%28")
.Replace(")", "%29").Replace("*", "%2A");
Run Code Online (Sandbox Code Playgroud)
它适用于我,但我想更有效地做它.有没有其他方法来逃避这些角色?我尝试使用Server.URLEncode(),但Facebook没有呈现它.
先谢谢,
Priya
jwa*_*zko 28
如果要与RFC3986标准兼容,则应使用Uri.EscapeDataString方法,其中定义了百分比编码.
例如,空格总是被编码为%20字符:
var result = Uri.EscapeDataString("a q");
// result == "a%20q"
Run Code Online (Sandbox Code Playgroud)
例如,使用HttpUtility.UrlEncode(通过内部使用的方式HttpServerUtility.UrlEncode)返回+字符:
var result = HttpUtility.UrlEncode("a q")
// result == "a+q"
Run Code Online (Sandbox Code Playgroud)
更重要的是,行为Uri.EscapeDataString与客户端encodeURIComponentjavascript方法兼容(除了区分大小写,但RFC3986表示它无关紧要).
对于那些仍在寻找的人,Thomas B 对此提供了一段很棒的俏皮话。
Regex.Replace(Uri.EscapeDataString(s), "[\!*\'\(\)]", Function(m) Uri.HexEscape(Convert.ToChar(m.Value(0).ToString())))
Run Code Online (Sandbox Code Playgroud)
在这个优秀答案下的评论中找到,它也为问题提供了良好的解决方案。
.Net 4.5 中的更改行为Uri.EscapeDataString。
保留和非保留字符列表现在支持 RFC 3986。
请参阅.NET Framework 4.5 中的应用程序兼容性。
另请注意RFC 3986 的特定保留字符。我没有广泛测试任何一个功能,也没有花时间研究 RFC 2396,因此我只能假设 Andrew 和 Thomas 使用保留字符的子集,因为该子集反映了RFC 2396 和 RFC 3986 之间的区别,其余字符已由 处理Uri.EscapeDataString。
| 归档时间: |
|
| 查看次数: |
21304 次 |
| 最近记录: |