http Url 编码

为了避开安全自负集表示法带来的限制,人们设计了一种编码机制,用来在Url中表示各种不安全的字符,这种编码机制就是通过一种"转义"表示法来表示不安全的字符

例如:

                    编码前                                                        编码后

http://www.joes-hardware.com/~joe     http://www.joes-hardware.com/%7Ejoe     

http://www.joes-hardware.com/ tools.html     http://www.joes-hardware.com/%20tools.html     


%+字符的ASCll编码的16进制

如:~ 对应 ASCLL编码126对应的16进制为7E (~ = %7E)

### C# 中的 HTTP URL 编码 在 C# 中,`HttpUtility.UrlEncode` 是用于执行 HTTP URL 编码的主要方法之一。该方法会将字符串中的特殊字符转换为其对应的百分号编码形式(Percent-Encoding),从而确保这些字符可以在 URI 或查询参数中安全传输。 以下是 `HttpUtility.UrlEncode` 的具体用法以及一个完整的示例: #### 示例代码 ```csharp using System; using System.Web; class Program { static void Main() { // 原始字符串包含特殊字符和中文 string originalString = "Name=John Doe&Message=Hello World! 你好,世界!"; // 对原始字符串进行 URL 编码 string encodedString = HttpUtility.UrlEncode(originalString); // 输出编码后的结果 Console.WriteLine("Original String: " + originalString); Console.WriteLine("Encoded String: " + encodedString); } } ``` 运行以上代码后,输出的结果将是: ``` Original String: Name=John Doe&Message=Hello World! 你好,世界! Encoded String: Name=John+Doe&Message=Hello+World%21+%E4%BD%A0%E5%A5%BD%EF%BC%8C%E4%B8%96%E7%95%8C%EF%BC%81 ``` 在这个例子中,空格被替换为加号 (`+`),而其他特殊字符则被转义为 `%XX` 形式的十六进制表示[^1]。 --- #### 关于 `HttpUtility.UrlEncode` 的细节 - **适用场景**:适用于对 URI 查询参数部分进行编码。 - **特点**:会对 `/`, `?`, `:` 等保留字符保持不变,仅对非法字符或具有特殊含义的字符(如空格、中文等)进行编码[^2]。 - **注意事项**:如果需要对整个 URL 进行编码,则应考虑使用 `Uri.EscapeDataString` 而非 `HttpUtility.UrlEncode`,因为后者可能不会对某些保留字符进行处理[^3]。 --- #### 另一种替代方案:`Uri.EscapeDataString` 除了 `HttpUtility.UrlEncode` 外,还可以使用 `Uri.EscapeDataString` 来实现更严格的 URL 编码。这种方法更适合对 URI 参数进行完全的安全化处理。 ##### 示例代码 ```csharp using System; class Program { static void Main() { string originalString = "http://www.example.com/path with spaces?key=value"; // 使用 Uri.EscapeDataString 进行编码 string encodedString = Uri.EscapeDataString(originalString); Console.WriteLine("Original String: " + originalString); Console.WriteLine("Encoded String: " + encodedString); } } ``` 运行结果如下: ``` Original String: http://www.example.com/path with spaces?key=value Encoded String: http%3A%2F%2Fwww.example.com%2Fpath%20with%20spaces%3Fkey%3Dvalue ``` 在这里,所有的特殊字符都被严格编码,包括协议前缀 (`http://`) 和路径分隔符 (`/`)。 --- ### 总结 - 如果只需要对查询参数进行编码,推荐使用 `HttpUtility.UrlEncode`[^1]。 - 如果需要对整个 URL 或其组成部分进行全面编码,建议使用 `Uri.EscapeDataString`[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值