url中可以出现的字符_Solutions针对url参数中出现的+、空格、=、%、&、#等字符的解决方案

 2024-02-15 00:03:25  阅读 0

com..media.util;

java.io.;

java.io.;

java.io.;

java.io.;

java.io.;

蒙斯.编解码器..;

班级 {

无效主([]参数){

// 测试编码到图像文件的转换

= "发布图像编码";

//下面使用会把+变成空格,所以在传输图片之前需要先转换一下。

= .(" ", "+");

(, "D:\\.jpg");

//测试图像文件到编码的转换

//.out.(("d:\\.jpg"));

/* ( ) {// 将图像文件转换为字节数组字符串并进行编码

字节[]数据=空;

//读取图像字节数组

尝试 {

in=new();

数据=新字节[in.()];

in.read(数据);

附寄();

} 捕获 (e) {

e.();

// 对字节数组进行编码

=新的();

.(data);//返回编码后的字节数组字符串

}*/

( , ) {//解码字节数组字符串并生成图像

if (== null) //图像数据为空

错误的;

// = 新的();

尝试 {

// 解码

byte[] 字节 = .();// .();

for (int i = 0; i < 字节。; ++i) {

if (bytes[i] < 0) {//调整异常数据

字节[i] += 256;

// 生成jpeg图像

输出=新();

输出.write(字节);

出.flush();

关闭();

真的;

} 捕获 (e) {

错误的;

当URL中包含+、空格、/、?、%、#、&、=等特殊符号时,服务器端可能无法获取到正确的参数值。 我应该怎么办?

解决方案

将这些字符转换为服务器可以识别的字符。 对应关系如下:

URL字符转义

将其替换为其他字符,或使用全角字符。

+ URL中的+号代表空格%2B

URL 中的空格可以是 + 或用 %20 编码

/分隔目录和子目录%2F

? 将实际 URL 和参数分开 %3F

% 指定特殊字符 %25

# 代表书签%23

& URL %26 中指定的参数之间的分隔符

= URL中指定的参数值%3D

URL 中的空格有时会编码为 %20,有时会编码为加号 +。 我一时糊涂了,查了资料才明白了。

URL的基本组成部分包括协议()、域名、端口号、路径和查询字符串(路径参数和锚标记暂时不考虑)。 使用问号? 将路径和查询字符串分开。 例如,路径为index,查询字符串(Query)为param=1。 URL中空格的编码与空格的位置有关:编码为加号+的空格只会出现在查询字符串部分,而编码为%20的空格可以出现在路径和查询字符串中。

造成这种混乱的原因是W3C标准规定,当-Type为/x-www-form-时,URL中的查询参数名和参数值中的空格必须用加号+替换,所以几乎所有浏览器使用此规范提交表单后,URL查询参数中的空格将被编码为加号+。 在另一个规范(RFC 2396,定义 URI)中,URI 中的保留字符需要转义为 %HH 格式(3.4 Query),因此空格将被编码为 %20,并且加号 + 本身也用作保留字 编码为%2B。 对于某些遵循 RFC 2396 标准的应用程序,它可能不接受查询字符串中出现的加号 +,认为它是非法字符。 因此,安全的做法是在 URL 中使用 %20 对空格字符进行编码。

Java 的初衷是将字符串编码为 /x-www-form-MIME 格式的字符串,这意味着它仅适用于 URL 的查询字符串部分,但它经常用于对 URL 的其他部分进行编码。 它的方法将空格编码为加号+。 相应地,它的方法会将加号 + 和 %20 解码为空格。 这种违反直觉的方法导致了我最初遇到的空间 URL 编码问题。 。 所以我后来做的就是,在打电话之后。 对URL进行编码(所有加号+已编码为%2B),然后调用("\\+", "%20")将所有加号+替换为%20。

当URL中包含+、空格、/、?、%、#、&、=等特殊符号时,服务器端可能无法获取到正确的参数值。 我应该怎么办?

解决方案

将这些字符转换为服务器可以识别的字符。 对应关系如下:

URL字符转义

将其替换为其他字符,或使用全角字符。

+ URL中的+号代表空格%2B

URL 中的空格可以是 + 或用 %20 编码

/分隔目录和子目录%2F

? 将实际 URL 和参数分开 %3F

% 指定特殊字符 %25

# 代表书签%23

& URL %26 中指定的参数之间的分隔符

= URL中指定的参数值%3D

URL 中的空格有时会编码为 %20,有时会编码为加号 +。 我一时糊涂了,查了资料才明白了。

URL的基本组成部分包括协议()、域名、端口号、路径和查询字符串(路径参数和锚标记暂时不考虑)。 使用问号? 将路径和查询字符串分开。 例如,路径为index,查询字符串(Query)为param=1。 URL中空格的编码与空格的位置有关:编码为加号+的空格只会出现在查询字符串部分,而编码为%20的空格可以出现在路径和查询字符串中。

造成这种混乱的原因是W3C标准规定,当-Type为/x-www-form-时,URL中的查询参数名和参数值中的空格必须用加号+替换,所以几乎所有浏览器使用此规范提交表单后,URL查询参数中的空格将被编码为加号+。 在另一个规范(RFC 2396,定义 URI)中,URI 中的保留字符需要转义为 %HH 格式(3.4 Query),因此空格将被编码为 %20,并且加号 + 本身也用作保留字 编码为%2B。 对于某些遵循 RFC 2396 标准的应用程序,它可能不接受查询字符串中出现的加号 +,认为它是非法字符。 因此,安全的做法是在 URL 中使用 %20 对空格字符进行编码。

Java 的初衷是将字符串编码为 /x-www-form-MIME 格式的字符串,这意味着它仅适用于 URL 的查询字符串部分,但它经常用于对 URL 的其他部分进行编码。 它的方法将空格编码为加号+。 相应地,它的方法会将加号 + 和 %20 解码为空格。 这种违反直觉的方法导致了我最初遇到的空间 URL 编码问题。 。 所以我后来做的就是,在打电话之后。 对URL进行编码(所有加号+已编码为%2B),然后调用("\\+","%20")将所有加号+替换为%20。

如本站内容信息有侵犯到您的权益请联系我们删除,谢谢!!


Copyright © 2020 All Rights Reserved 京ICP5741267-1号 统计代码