URLEncode原理
概念:
URLEncode是一种将特殊字符转换成百分号编码的方法,以便浏览器和服务器之间能够正确地处理它们。该方法会将某些字符替换为由 ‘%’ 和其后面的两个十六进制数字所组成的编码。这些字符包括字母、数字、下划线、连字符、句点以及某些保留字符。
URLEncode的目的是将URL或者HTTP请求中的非ASCII字符编码成可以使用的ASCII字符,以保证正确传递和处理,例如将空格编码成"%20"、中文编码成"%E4%BD%A0%E5%A5%BD"等。通常在使用HTTP GET请求提交参数时,需要对参数进行URLEncode编码,以防止出现特殊字符导致的错误。
例如,浏览器中进行百度搜索“你好”时,链接地址会被自动编码:
(编码前)https://www.baidu.com/s?wd=你好
(编码后)https://www.baidu.com/s?wd=%E4%BD%A0%E5%A5%BD
出现以上情况是网络请求前,浏览器对请求URL进行了URL编码(URL Encoding)
。
URL编码(URL Encoding)
:也称作百分号编码(Percent Encoding)
, 是特定上下文的统一资源定位符 URL的编码机制。URL编码(URL Encoding)
也适用于统一资源标志符(URI)
的编码,同样用于application/x-www-form-urlencoded MIME
准备数据。
什么是URL
URL是为了 统一的命名网络中的一个资源(URL不是单单为了HTTP协议而定义的,而是网络上的所有的协议都可以使用)
为什么要URLEncode
URL在定义时,定义为只支持ASCII字符,所以URL的发送方与接收方都只能处理ASCII字符。所以当你的URL中有非ASCII字符时就需要编码转换。
在Web程序中进行URL请求时,常会遇到URL中含有特殊字符的问题,常见的特殊字符有 ?$&*@等字符,或者是中文。
遇到这种情况时,就要对URL进行编码,用一种规则替换掉这些特殊字符,这就是URLEncode
URLEncode 规则
- 1.将空格转换为加号(+)
- 2.对0-9、a-z、A-Z之间的字符保持不变
- 3.对于所有其他的字符,用这个字符的当前当前字符集编码在内存中的十六进制格式表示,并在每一个字节前加上一个百分号(%),如字符“+”是用%2B表示,字符“=”用%3D表示,字符“&”用%26表示,每个中文字符在内存中占两个字节,字符“中”用%D6%D0表示,字符“国”用%B9%FA表示。
- 4.空格也可以直接用其十六进制编码方式,即用%20表示,而不是将它转换为加号(+)。
特殊字符
特殊字符 | 编码结果 |
---|---|
+ | %2B |
= | %3D |
# | %23 |
… | … |
使用URLEncode原因
1、字符串数据以url的形式传递给web服务器时,字符串中是不允许出现空格和特殊字符的
2、因为 url 对字符有限制,比如把一个邮箱放入 url,就需要使用 urlencode 函数,因为 url 中不能包含 @ 字符
3、url转义其实也只是为了符合url的规范而已。因为在标准的url规范中中文和很多的字符是不允许出现在url中的。(主要就是消除服务器解析url时的奇异)
Java URL编码实现流程
1. 了解URL编码的概念
在进行URL传输时,由于URL中可能包含特殊字符和非ASCII字符,为了保证URL的正确性和可读性,需要对URL进行编码。
URL编码使用百分号(%)加上两位的十六进制表示来替换非字母数字字符,以便于在URL中传输。例如,空格字符会被替换为"%20"。
2. URL编码的实现
Java提供了URL编码的工具类URLEncoder
,通过该类可以方便地进行URL编码的实现。
下面是实现URL编码的步骤:
步骤 | 描述 |
---|---|
1. 获取URL字符串 | 获取需要进行编码的URL字符串 |
2. 创建URL编码器对象 | 创建URLEncoder 对象 |
3. 执行URL编码 | 调用encode 方法,传入URL字符串和指定字符编码 |
4. 获取编码结果 | 获取URL编码后的结果 |
下面我们来逐步讲解每个步骤需要做的事情,并给出相应的代码示例。
3. 实现步骤及代码示例
3.1 获取URL字符串
首先,我们需要获取需要进行URL编码的字符串。假设我们需要对字符串`
String urlStr = "
3.2 创建URL编码器对象
接下来,我们需要创建URLEncoder
对象,用于执行URL编码操作。
URLEncoder encoder = new URLEncoder();
3.3 执行URL编码
调用URLEncoder
对象的encode
方法,传入URL字符串和指定的字符编码,进行URL编码操作。常用的字符编码有UTF-8、GBK等。
String charset = "UTF-8";
String encodedUrl = encoder.encode(urlStr, charset);
3.4 获取编码结果
通过encodedUrl
变量,我们可以获取URL编码后的结果。
System.out.println("Encoded URL: " + encodedUrl);
4. 完整代码示例
下面是整个URL编码的完整代码示例:
import java.net.URLEncoder;
import java.io.UnsupportedEncodingException;
public class URLEncodingExample {
public static void main(String[] args) {
// 1. 获取URL字符串
String urlStr = "
// 2. 创建URL编码器对象
URLEncoder encoder = new URLEncoder();
try {
// 3. 执行URL编码
String charset = "UTF-8";
String encodedUrl = encoder.encode(urlStr, charset);
// 4. 获取编码结果
System.out.println("Encoded URL: " + encodedUrl);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
}
运行以上代码,将输出URL编码后的结果:
Encoded URL: https%3A%2F%2Fwww.example.com%2Fsearch%3Fq%3Djava%E7%BC%96%E7%A8%8B
5. 状态图
下面是URL编码的状态图:
获取URL字符串创建URL编码器对象执行URL编码获取编码结果
以上就是Java实现URL编码的流程和代码示例,通过这个流程,我们可以轻松地实现URL编码的功能。希望这篇文章对刚入行的小白有所帮助!