.net URI 编码不正确
本文关键字:不正确 编码 URI net | 更新日期: 2023-09-27 18:24:14
我需要解析http://website.com/page?id=ABCD | EFG
:
Dim WebR As HttpWebRequest = DirectCast(WebRequest.Create(URL), HttpWebRequest)
任何普通的浏览器(如火狐浏览器(都会对URL进行如下编码:http://website.com/page?id=ABCD%20|%20EFG
但是,当使用我提供的代码或创建新的 URI 时,URL 将编码为:http://website.com/page?id=ABCD%20%7C%20EFG
这对我不起作用,因为那个id
不存在。
如何解决这个问题?
这里的诀窍是:不要从非法网址开始。如果您自己构造 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
.这是正确的网址。 |
不是 URL 中的有效字符。
从 https://www.rfc-editor.org/rfc/rfc3986#section-2 开始,未保留的字符定义为:
unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
其中ALPHA
定义为A
- Z
和a
- z
,DIGIT
定义为0
- 9
。
其他任何内容都需要进行 % 编码。