首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Server.UrlEncode与HttpUtility.UrlEncode

Server.UrlEncode与HttpUtility.UrlEncode
EN

Stack Overflow用户
提问于 2009-03-02 15:00:58
回答 5查看 150.4K关注 0票数 192

Server.UrlEncode和HttpUtility.UrlEncode有什么区别吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-03-02 15:03:07

HttpServerUtility.UrlEncode将在内部使用HttpUtility.UrlEncode。没有具体的区别。Server.UrlEncode之所以存在,是因为它与传统的ASP.

票数 139
EN

Stack Overflow用户

发布于 2017-12-19 06:49:03

快进到9年前,这个问题首次被提出,在URL和.NET标准的世界中,我们最常见的网址编码选项是WebUtility.UrlEncode (在System.Net下)和Uri.EscapeDataString.从这里和其他地方最流行的答案来看,Uri.EscapeDataString似乎更可取。但这是真的吗?我做了一些分析,以了解其中的差异,以下是我得出的结论:

对于URL编码而言,字符属于以下三种类别之一:非保留(URL中的合法);保留(在中合法,但具有特殊含义,因此您可能希望对其进行编码);以及其他所有内容(必须始终进行编码)。

根据RFC,保留字符为::/?#[]@!$&'()*+,;=

非保留字符是字母数字和-._~

判决结果

Uri.EscapeDataString明确定义了它的任务:%-对所有保留和非法字符进行编码。WebUtility.UrlEncode在定义和实现上都比较模糊。奇怪的是,它只编码一些保留字符,而不编码其他保留字符(为什么是圆括号而不是方括号?),更奇怪的是,它编码的是非保留的~字符。

因此,我同意流行的建议-尽可能使用Uri.EscapeDataString,并理解将对保留字符进行编码,如/?。如果您需要处理可能很大的字符串,特别是使用URL编码的表单内容,那么您需要使用WebUtility.UrlEncode并接受它的怪癖,或者以其他方式解决这个问题。

编辑:我已经通过Url.EncodeUrl.EncodeIllegalCharactersUrl.Decode静态方法在Flurl中纠正了上面提到的所有怪癖。这些都在core package中(它很小,并不包含所有的HTTP内容),或者可以随意从源代码中获取它们。我欢迎您对这些内容的任何意见/反馈。

下面是我用来发现哪些字符编码不同的代码:

代码语言:javascript
复制
var diffs =
    from i in Enumerable.Range(0, char.MaxValue + 1)
    let c = (char)i
    where !char.IsHighSurrogate(c)
    let diff = new {
        Original = c,
        UrlEncode = WebUtility.UrlEncode(c.ToString()),
        EscapeDataString = Uri.EscapeDataString(c.ToString()),
    }
    where diff.UrlEncode != diff.EscapeDataString
    select diff;

foreach (var diff in diffs)
    Console.WriteLine($"{diff.Original}\t{diff.UrlEncode}\t{diff.EscapeDataString}");
票数 79
EN

Stack Overflow用户

发布于 2009-03-02 20:56:49

记住,您可能不应该使用这两种方法中的任何一种。微软的Anti-Cross Site Scripting Library包括HttpUtility.UrlEncodeHttpUtility.HtmlEncode的替代品,它们都更符合标准,也更安全。作为额外的奖励,您还可以获得一个JavaScriptEncode方法。

票数 30
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/602642

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档