JavaScript与C# URL编码解码方法对比及使用指南

作者:资源驿站

时间:2026-10-21

浏览:623

本文详细对比了JavaScript与C#中常用的URL编码与解码方法。重点解析了JavaScript的encodeURI与encodeURIComponent在特殊字符处理上的差异,以及C#中Server.UrlEncode、HttpUtility.UrlEncode和Uri.EscapeDataString等方法的编码行为与空格处理特性,帮助开发者根据实际需求选择正确的编码策略。

文章目录

JavaScript URL编码方法

JavaScript部分

使用encodeURI()函数进行编码,对应的解码函数为decodeURI()。该函数不会转义以下字符:连字符(-)、下划线(_)、句点(.)、感叹号(!)、波浪号(~)、星号(*)、单引号(')、左括号(())、分号(;)、斜杠(/)、问号(?)、at符号(@)、与号(&)、等号(=)、加号(+)、逗号(,)和井号(#)。


例如:
encodeURI(“https://www.jb51.net?a=-_.!~*'();/?:@&=+$,#”)
输出:
“https://www.jb51.net?a=-_.!~*'();/?:@&=+$,#”

使用encodeURIComponent()函数进行编码,对应的解码函数为decodeURIComponent()。该函数不会转义的字符包括:连字符(-)、下划线(_)、句点(.)、感叹号(!)、波浪号(~)、星号(*)、单引号(')和括号(())。

例如:

encodeURIComponent("https://www.jb51.net?a=-_.!~*'();/?:@&=+$,#")

输出:

"http%3A%2F%2Fwww.jb51.net%3Fa%3D-_.!~*'()%3B%2F%3F%3A%40%26%3D%2B%24%2C%23"

两者的主要区别在于对分号(;)、问号(?)、at符号(@)、与号(&)、等号(=)、加号(+)、逗号(,)和井号(#)这些字符的处理方式不同。

此外还有一个附加方法escape(),但ECMAScript v3标准反对使用该方法。推测原因可能与转义序列格式有关:escape()对于代码单元小于等于0xFF的字符,使用%xx格式的两位数转义序列;对于代码单元大于0xFF的字符,使用%uxxxx格式的四位数转义序列。具体细节可参考ECMAScript规范,此处不再深入。同样,unescape()也不推荐使用。

C# URL编码方法

C#部分:

C#中的编码处理相对复杂,既包含urlencode也包含htmlencode。但在处理URL时,我们只需关注URL相关的编码方法;HTML编码通常在处理HTML内容或防止XSS攻击时才需要用到。

下面介绍URL相关的常用方法:

Server.UrlEncode(解码:Server.UrlDecode):该方法使用系统预设编码作为参数调用HttpUtility.UrlEncode进行编码。因此,如果系统全局配置为UTF-8编码,这两个方法的效果是一致的(关于是否始终使用系统预设编码,官方文档未明确说明,有待考证)。对应的还有HttpUtility.UrlEncode(解码:HttpUtility.UrlDecode)。

例如:

HttpUtility.UrlEncode("https://www.jb51.net?a=-_.!~*'();/?:@&=+$,#")

输出:

http%3a%2f%2fwww.jb51.net%3fa%3d-_.!%7e*%27()%3b%2f%3f%3a%40%26%3d%2b%24%2c%23

由此可见,此方法会对URL地址进行编码。需要注意的是,该方法会将空格编码为加号(+),而不是十六进制的%20。因此,如果编码参数中包含空格,可能会导致错误。

Uri.EscapeUriString(未找到对应的解码方法):该方法会对中文、空格等进行转义。

例如:

Uri.EscapeUriString("https://www.jb51.net?a=中国&123 -_.!~*'();/?:@&=+$,#")

输出:

https://www.jb51.net?a=%E4%B8%AD%E5%9B%BD&123%20%20%20-_.!~*'();/?:@&=+$,#

可见,此方法不会对网址部分进行编码。

Uri.EscapeDataString(解码:Uri.UnescapeDataString):该方法不仅对参数进行编码,还会对网址部分进行编码。

例如:

Uri.EscapeDataString("https://www.jb51.net?a=中国&123 -_.!~*'();/?:@&=+$,#")

输出:http%3A%2F%2Fwww.jb51.net%3Fa%3D%E4%B8%AD%E5%9B%BD%26123%20%20%20-_.%21~%2A%2 7%28%29%3B%2F%3F%3A%40%26%3D%2B%24%2C%23

所以,总结:

不需要编码://可用:JavaScript中用encodeURI,否则用encodeURIComponent,C#中用Uri.EscapeUriString否则用Uri.EscapeDataString

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章