我正试图让我的网址逃脱,但它无法正常工作。具有讽刺意味的是,当我执行这部分代码时,在我的MacBook上
Uri url = new Uri("http://www.example.com/?i=123%34", true);
// it returns http://www.example.com/?i=123%34 which is exactly what I want.
问题是我的IDE说它已经过时了,它在我的Windows机器上不起作用。这是完全相同的项目和IDE。所以我试图找到一个有人建议的解决方案
Uri uri = new Uri(Uri.EscapeUriString("http://www.example.com/?i=123%34"));
// this returns http://www.example.com/?i=123%2534 which is what I DONT want.
那么我该如何解决这个问题呢?我浏览了整个网络,找不到任何解决方案。我需要知道如何正确地逃避这个URL。上面发布的第二种方法与上面的第一种方法不同。
我通过Fiddler验证了GET请求,所以一切都确实发生了。
更新
同样,我需要服务器接收URL到底是如何声明字符串的。我希望服务器处理转换。我不能用%25替换%符号。必须完全接收我声明字符串的方式。此外,“http://www.example.com/?i=1234”也不是我想要的。
答案 0 :(得分:0)
如果您对字符串读取ht tp://www.example.com/?i = 1234没问题,您可以尝试
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)/index(/*)$ index.php?lang=$1 [L]
RewriteRule ^(.+)/links(/*)$ links.php?lang=$1 [L]
答案 1 :(得分:0)
问题在于Windows上的Web服务器配置,允许双重转义。您的原始网址为http://www.example.com/?i=123%34,未转义时会变为http://www.example.com/?i=1234。
另一方面,Windows上的Web服务器再次转义%
字符而不是转义%34
。因此,它变成了http://www.example.com/?i=123%2534。
这就是为什么在转义之前不应在网址中使用%
之类的字符。
编辑 -
我在Firefox中输入以下两个网址,以了解服务器上如何接收参数。
http://www.example.com/?i=123%34中i
的值为1234
。
http://www.example.com/?i=123%2534中i
的值为123%34
如果服务器必须接收%字符,则必须对其进行转义,以便通过HTTP分派它。实际上没有其他方法可以通过网络发送它。如果您没有转义%
字符,它将与34
一起视为转义序列,并在服务器上自动转为4
。
如果您的网络检查员在请求中向您显示未转义的文字,那是因为它会在向您展示之前对其进行美化。