从此不再惧怕URI编码:JavaScript及C# URI编码详解
URI是什么?
URI(Uniform Resource Identifier),中文名为统一资源标识符,是用于标识抽象或物理资源的字符串。
在Web中,我们常用URI表示Web资源的位置和ID。
URI分为三个部分:
URI = scheme://host[:port]/path[?query][#fragment]
- scheme表示访问资源所使用的协议,如http、https、ftp等;
- host表示资源所在的主机名或IP地址;
- port表示网络资源的端口号;
- path表示网络资源的访问路径;
- query表示对网络资源的请求参数;
- fragment表示资源内部指向的锚点。
URI编码是什么?
URI编码是一种用来对URI中的非ASCII字符和特殊字符进行编码的过程,以便能够在URI中可靠地传输和解析。
URI编码使用百分号(%)后面跟两个字符的方式来表示一个字符。其中,两个字符表示该字符在ASCII字符集合中的16进制表示,例如%20表示空格符。
URI编码在JavaScript的实现
在JavaScript中,可以使用内置的 encodeURI()函数和encodeURIComponent()函数对URI编码进行处理。
encodeURI()
encodeURI()函数会对整个URI进行编码处理,不会对URL中的特殊字符进行编码。其中,特殊字符包括:
- 保留字符:! * ' ( ) ; : @ & = + $ , / ? # [ ]
- 非保留字符:字母、数字、- _ . ! ~ * ' ( )
示例代码:
let uri = "https://www.example.com/search?q=钓鱼岛";
let encodedUri = encodeURI(uri);
console.log(encodedUri); // 输出 https://www.example.com/search?q=%E9%92%93%E9%B1%BC%E5%B2%9B
encodeURIComponent()
encodeURIComponent()函数会对整个URI进行编码处理,同时也会对URL中的特殊字符进行编码。其中,特殊字符同上。
示例代码:
let uri = "https://www.example.com/search?q=钓鱼岛";
let encodedUri = encodeURIComponent(uri);
console.log(encodedUri); // 输出 https%3A%2F%2Fwww.example.com%2Fsearch%3Fq%3D%25E9%2592%2593%25E9%25B1%25BC%25E5%25B2%259B
URI编码在C#的实现
在C#中,可以使用System.Web.HttpUtility类中的UrlEncode()方法和UrlDecode()方法对URI编码进行处理。
UrlEncode()
UrlEncode()方法会对整个URI进行编码处理,同时也会对URL中的特殊字符进行编码。其中,特殊字符同上。
示例代码:
string uri = "https://www.example.com/search?q=钓鱼岛";
string encodedUri = System.Web.HttpUtility.UrlEncode(uri);
Console.WriteLine(encodedUri); // 输出 https%3a%2f%2fwww.example.com%2fsearch%3fq%3d%e9%92%93%e9%b1%bc%e5%b2%9b
UrlDecode()
UrlDecode()方法会对整个URI进行解码处理。
示例代码:
string uri = "https%3a%2f%2fwww.example.com%2fsearch%3fq%3d%e9%92%93%e9%b1%bc%e5%b2%9b";
string decodedUri = System.Web.HttpUtility.UrlDecode(uri);
Console.WriteLine(decodedUri); // 输出 https://www.example.com/search?q=钓鱼岛
结论
URI编码是一种对URI进行处理的重要方法,能够在URI中可靠地传输和解析非ASCII字符和特殊字符。
在JavaScript中,可以使用内置的encodeURI()函数和encodeURIComponent()函数对URI编码进行处理。
在C#中,可以使用System.Web.HttpUtility类中的UrlEncode()方法和UrlDecode()方法对URI编码进行处理。
需要注意的是,URI编码对于相同的字符,JavaScript和C#实现的编码方式可能会不同,因此在使用时需要注意URI编码的一致性。
示例
示例1
原始URI:https://baike.baidu.com/item/朝阳群众艺术馆
JavaScript编码:https://baike.baidu.com/item/%E6%9C%9D%E9%98%B3%E7%BE%A4%E4%BC%97%E8%89%BA%E6%9C%AF%E9%A6%86
C#编码:https%3A%2F%2Fbaike.baidu.com%2Fitem%2F%e6%9c%9d%e9%98%b3%e7%be%a4%e4%bc%97%e8%89%ba%e6%9c%af%e9%a6%86
示例2
原始URI:https://www.baidu.com/s?wd=%E9%92%93%E9%B1%BC%E5%B2%9B&pn=20
JavaScript编码:https://www.baidu.com/s?wd=%E9%92%93%E9%B1%BC%E5%B2%9B&pn=20
C#编码:https%3A%2F%2Fwww.baidu.com%2Fs%3Fwd%3D%25E9%2592%2593%25E9%25B1%25BC%25E5%25B2%259B%26pn%3D20
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:从此不再惧怕URI编码 JavaScript及C# URI编码详解 - Python技术站