我需要解析http://website.com/page?id=ABCD | EFG
:
Dim WebR As HttpWebRequest = DirectCast(WebRequest.Create(URL), HttpWebRequest)
任何普通的浏览器(例如firefox)都会对URL进行编码,如下所示:http://website.com/page?id=ABCD%20|%20EFG
但是,在使用我提供的代码或创建新URI时,URL会被编码为:http://website.com/page?id=ABCD%20%7C%20EFG
哪个不适合我,因为id
不存在。
如何解决这个问题?
答案 0 :(得分:2)
这里的诀窍是:不要以非法网址开头。如果您自己构建URL,则逃避组件是您的工作。例如:
string id = "ABCD | EFG"; // perhaps via some more complicated code
string url = "http://website.com/page?id=" + Uri.EscapeDataString(id);
这正确输出http://website.com/page?id=ABCD%20%7C%20EFG
。这是正确的网址。 |
不是网址中的有效字符。
从http://tools.ietf.org/html/rfc3986#section-2开始,未保留的字符定义为:
unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
其中ALPHA
定义为A
- Z
和a
- z
,DIGIT
定义为0
- 9
其他任何东西都需要%编码。