- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
为什么以下 URL 会给我以下 IIS 错误:
A) http://192.168.1.96/cms/View.aspx/Show/Small+test '
A2) http://192.168.1.96/cms/View.aspx/Show/Small%20test ' <-- 这有效,但不是 HttpUtility.UrlEncode() 的结果
B) http://192.168.1.96/cms/View.aspx/Show/ '%26$%23funky**!!~''+页面
A 的错误:
HTTP Error 404.11 - Not Found
The request filtering module is configured to deny a request that contains a double escape sequence.
B 的错误:
HTTP Error 400.0 - Bad Request
ASP.NET detected invalid characters in the URL.
/Show/之后的 URL 的最后一部分是通过 HttpUtility.UrlEncode() 发送文本后的结果,因此根据 Microsoft 的说法,它是正确编码的 URL。
如果我使用 HttpUtility.UrlPathEncode() 而不是 HttpUtility.UrlEncode() 我会得到 A2 结果。但是 B 最终看起来像:
http://192.168.1.96/TVCMS-CVJZ/cms/View.aspx/Show/ '&$#funky**!!~''%20页
这仍然是错误的。 Microsoft 完全知道如何进行 URL 编码吗?是否有人编写了一个函数来以正确的方式执行此操作?
编辑:
我已经编写了自己的编码器:
static public string UrlEncode(string encode)
{
if (encode == null) return null;
string encoded = "";
foreach (char c in encode)
{
int val = (int)c;
if ((val >= 48 && val <= 57) || (val >= 65 && val <= 90) || (val >= 97 && val <= 122))
encoded += c;
else
encoded += "%" + val.ToString("X");
}
return encoded;
}
该函数适用于上面的 A2,B 的结果是:
http://192.168.1.96/cms/View.aspx/Show/%27%26%24%23funky%2A%2A%21%21~%27%27%20page
但即使这看起来像一个不错的有效 URL IIS 仍然给我一个
HTTP 错误 400.0 - 错误请求ASP.NET 在 URL 中检测到无效字符。
最佳答案
好的,回答我自己的问题...讨厌这样做,但经过大量挖掘后我得到了答案。
总而言之,微软在其所有的荣耀中决定不再坚持国际标准。
%、&、* 或 : 不能在 URL 中,在 ? 之前编码或解码出于任何原因。
为了解决这个问题,我编写了自己的编码和解码:
static public string UrlEncode(string encode)
{
if (encode == null) return null;
string encoded = "";
foreach (char c in encode)
{
int val = (int)c;
if (val == 32 || val == 45 || (val >= 48 && val <= 57) || (val >= 65 && val <= 90) || (val >= 97 && val <= 122))
encoded += c;
else
encoded += "%" + val.ToString("X");
}
// Fix MS BS
encoded = encoded.Replace("%25", "-25").Replace("%2A", "-2A").Replace("%26", "-26").Replace("%3A", "-3A");
return encoded;
}
static public string UrlDecode(string decode)
{
if (decode == null) return null;
// Fix MS BS
decode = decode.Replace("-25", "%25").Replace("-2A", "%2A").Replace("-26", "%26").Replace("-3A", "%3A");
return HttpUtility.UrlDecode(decode);
}
目前这两个函数都不是 Unicode 友好的,但现在它可以工作。
关于c# - 收到错误 400/404 - HttpUtility.UrlEncode 未对完整字符串进行编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4599940/
我正在编写一个 Web 应用程序并学习如何对 html 链接进行 urlencode... 这里的所有 urlencode 问题(参见下面的标签)都是“如何...?”问题。 我的问题不是“如何?”但“
Dart 中有进行 urlencoding 的函数吗?我正在使用 XMLHttpRequest 对象进行 AJAX 调用,并且需要对 url 进行 url 编码。 我在 dartlang.org 上进
我们有一些非常基本的 mod_rewrite 规则: RewriteRule ^something.swf$ http://www.newdomain.com/something.swf [R=302
Server.UrlEncode 和 HttpUtility.UrlEncode 之间有区别吗? 最佳答案 我之前对这些方法感到非常头疼,我建议您避免 UrlEncode 的任何变体,而是使用 Uri
在PHP中: php -r "echo urlencode('["IM"]'); " 结果是%5BIM%5D 但是在java中 String text = URLEncoder.encode('["
From Python 的 urllib.urlencode 的 java 等价物是什么? 喜欢 >>> urllib.urlencode({'abc':'d f', 'def': '-!2'}) '
我发现了一个奇怪的问题,即 urlencoding 行为不一致。 更新 Spring MVC 4.3 和 5.1 版本之间存在差异: // FAIL in MVC 4.x @Test public v
express 框架带有 express 函数 express.json() 和 express.urlencoded()。 我们有 body-parser 库,它似乎具有相同的功能。 我的问题是,b
所以我正在处理的站点有一个过滤系统,它通过一个查询字符串传递一个键和值系统来运行。 整个站点很快就会进行重构,我正在维护现有站点,因此在我们讨论实现这一点的正确方法之前,我只需要更改分隔符的想法。 现
Dart中有进行urlencoding的功能吗?我正在使用XMLHttpRequest对象进行AJAX调用,我需要对该URL进行URL编码。 我在dartlang.org上进行了搜索,但没有得到任何结
我正在创建一个涉及将中文字符作为 url 参数发送的 php 应用程序。 我必须发送如下查询: http://xyz.com/?q=New 但是 xyz.com 的脚本不会自动对中文字符进行编码。因此
全部, 有个文字区说 如果用户给出输入, here is my name and my mail id is "a@x.com" 当数据在服务器端发布时,数据被接收为 这是我的名字,我的邮件
我想使用java的URLEncoder class编码我的 url 字符串。但是,默认情况下它将空格转换为“+”(加号)。我希望它改用“-”(类似于本网站对其网址进行编码的方式)。 我想知道最好的方法
我想对以下内部模板进行 url 编码 {{address.street}} {{address.city}} {address.state}} 无论如何在模板端执行此操作并将其放入href(我不希望将
我想在控制台应用程序VB.NET,VS 2010 Beta 2中使用HttpUtility.UrlEncode。 System.Web.HttpUtility.UrlEncode(item) 错误消息
我有一个服务堆栈应用程序,一个测试服务收到一个简单的请求,但是我发现收到的请求的值与原始请求不匹配。 我发:http://localhost/testapp/test?value=%22test%20
有没有办法对路径中的目录分隔符/进行 urlencode ? 喜欢 urlencode('/this/is/my/file right here.jpg'); 最佳答案 你可以使用 explode将您
是否可以在不转换 # 或 % 的情况下运行 urlencode 函数? 最佳答案 你能不能只做: $str = urlencode($str); $str = str_replace("%23", "
我正在尝试使用可选参数 shown in the docs 对 Django 1.3 中包含斜杠的字符串进行 URL 编码: {{ someString|urlencode:"" }} 但是,斜杠不会
我无法快速找到谷歌答案,而且我面前没有帮助(长话短说),所以,我的问题是:是否有一种简单的方法可以在 MS Visual 中对字符串进行 URL 编码FoxPro 8 最佳答案 这是一个可以满足您需要
我是一名优秀的程序员,十分优秀!