URL编码解决中文字符乱码(encodeURIComponent、encodeURI和decodeURIComponent、decodeURI)

本文介绍了URI编码的概念,详细阐述了encodeURIComponent和encodeURI的区别及使用场景。encodeURIComponent适用于编码URI片段,对所有非字母数字字符进行编码,而encodeURI用于整个URI,不编码特定的特殊字符。在解码时,对应使用decodeURIComponent和decodeURI。在实际应用中,encodeURIComponent更为常见,特别是在处理查询字符串参数时。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.概念

URI: Uniform ResourceIdentifiers,通用资源标识符
Global对象的encodeURI()和encodeURIComponent()方法可以对URI进行编码,以便发送给浏览器。有效的URI中不能包含某些字符,例如空格。而这URI编码方法就可以对URI进行编码,它们用特殊的UTF-8编码替换所有无效的字 符,从而让浏览器能够接受和理解。

2、encodeURIComponent

encodeURIComponent 转义除了字母、数字、(、)、.、!、~、*、’、-和_之外的所有字符(可看下表的非转义字符更清晰)。

注意:为了避免服务器收到不可预知的请求,对任何用户输入的作为URI部分的内容你都需要用encodeURIComponent进行转义。

3、encodeURI

encodeURI 会替换所有的字符,但不包括以下字符,即使它们具有适当的UTF-8转义序列:
在这里插入图片描述

注意:encodeURI 自身无法产生能适用于HTTP GET 或 POST 请求的URI,例如对于 XMLHTTPRequests, 因为 “&”, “+”, 和 “=” 不会被编码,然而在 GET 和 POST 请求中它们是特殊字符。故因采用encodeURIComponent这个方法会对这些字符编码。

4、区别

其中encodeURI()主要用于整个URI(例如࿰

在Java中,`java.net.URI` `java.net.URLEncoder` 类提供了解码编码URL的功能。以下是这些函数的基本用法: 1. **encodeURI()**: 这个方法用于对URL的一部分进行编码,以便在网络上传输。它不会编码特殊字符 `%`,而是将其后面的两个十六进制数字视为UTF-8字符的编码。例如: ```java import java.net.URI; String unencoded = "http://example.com/path?query=包含#特殊字符"; URI uri = new URI(unencoded); String encoded = uri.toString(); // "http://example.com/path?query=%E6%95%88%E7%A7%BB%23%E4%B8%AD%E7%BD%91%E6%96%87%E5%AD%97" ``` 2. **encodeURIComponent()**: 这个方法不是Java内置的,但在某些场景下,如JavaScript,可能会用于编码URL查询字符串中的非字母数字字符。对于Java,通常会用到`encodeURI()`代替,因为它已经包含了需要的部分。 3. **decodeURI()**: 这个方法用于解码由`encodeURI()`编码URL,将 `%XX` 编码形式还原为实际字符。 ```java import java.net.URI; String encoded = "%E6%95%88%E7%A7%BB%23%E4%B8%AD%E7%BD%91%E6%96%87%E5%AD%97"; URI decodedUri = new URI(encoded); String decodedPath = decodedUri.getPath(); // "包含#中文字符" ``` 4. **decodeURIComponent()**: 与`decodeURI()`类似,用于解码由`encodeURIComponent()`编码URL部分。在Java中,由于`encodeURI()`已经处理了这个需求,一般不需要单独使用。 需要注意的是,在实际使用时,你应该根据具体的上下文选择合适的方法,比如处理URL的路径、查询参数或片段标识符等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大鹏小站

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值