我正在做一些重定向和返回网址的事情,我注意到一些时髦的东西。我在visual studio立即窗口中运行了这行代码。
Uri.EscapeUriString("/z?x=y&w="+Uri.EscapeUriString("/a?b=c&d=e"))
"/z?x=y&w=/a?b=c&d=e"
好的,这看起来像错误的逃脱。我的应用程序究竟是怎么想知道d是查询字符串的一部分还是字符串的一部分,意思是我想要重定向到以后的URL。所以我尝试了UnescapeDataString并用Google搜索以防万一。
Uri.UnescapeDataString(Uri.EscapeDataString("a b+c"))
"a b+c"
事实证明我不应该使用它,因为它不会将'+'解码到空间,就像它应该
Uri.UnescapeDataString("ab+c")
"ab+c"
如果UnescapeDataString和EscapeUriString都不对,那我觉得如何逃避uri's?
答案 0 :(得分:1)
您可以尝试HttpUtility.UrlEncode
和HttpUtility.UrlDecode
答案 1 :(得分:1)
是的,HttpUtility.UrlEncode是要走的路。
这是一个例子。代码:
using System;
using System.Web;
namespace SO14450178
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(Uri.EscapeUriString("/z?x=y&w="+Uri.EscapeUriString("/a?b=c&d=e")));
string encoded = HttpUtility.UrlEncode("/z?x=y&w=" + HttpUtility.UrlEncode("/a?b=c&d=e"));
Console.WriteLine(encoded);
Console.WriteLine(HttpUtility.UrlDecode(encoded));
}
}
}
输出:
/z?x=y&w=/a?b=c&d=e
%2fz%3fx%3dy%26w%3d%252fa%253fb%253dc%2526d%253de
/z?x=y&w=%2fa%3fb%3dc%26d%3de
请注意,单个解码只会像您期望的那样解码两个Encode中的一个。