之前一直用得好好的系统今天出现了一点小状况, 在http请求时抛出了久违的签名错误,这里的签名是自己定义的规则,客户端与服务端在交互时会对参数进行一定规则排序加密后的值当做签名以防篡改.
跟踪了服务端日志跟客户端日志后发现最终排序后的签名串是一致的,但签名出来的结果不一样,那只能是在排序后进行编码签名时出现了值不一致的情况
用户输入的值是"select*from'tab"
js encodeURIComponent后的值依旧是: select*from'tab
java URLEncoder编码后的值是: select*from%27tab
也就是对于"'"这个字符,js没有将其编码,而java却将其编码成%27
继续查资料, 发现javascript跟java在进行编码时遵循的规范不一样,
java的为了在各个系统间做兼容,处理了特殊符号,处理方式如下
1.字符"a"-"z","A"-"Z","0"-"9",".","-","*",和"_" 都不会被编码;
2.将空格转换为加号 (+) ;
3.将非文本内容转换成"%xy"的形式,xy是两位16进制的数值;
4.在每个 name=value 对之间放置 & 符号
最终将js和java的ascii 1-127的字符循环编码匹配不同,最终发现有以下几值不同
ascii java js
+ %20
! %21 !
' %27 '
( %28 (
) %29 )
~ %7E ~
然后在js 编码后对特殊字符做个处理
s = s.replace(/%20/gi, "+").replace(/(!)|(')|(\()|(\))|(\~)/gi, function(item) {
return "%" + item.charCodeAt(0).toString(16).toLocaleUpperCase();
});
问题解决
分享到:
相关推荐
其中,`encodeURIComponent()` 与Java的 `URLEncoder.encode()` 类似,适用于大多数情况,因为它不会编码 `/`、`:`、`;`、`?`、`@`、`&`、`=`、`+` 和 `,` 这些在URL中具有特殊意义的字符。 总结来说,理解并正确...
总结来说,Java中实现`encodeURIComponent`和`decodeURIComponent`的方法需要额外的转换步骤,以确保与JavaScript的对应函数行为一致。这些自定义的实现可以帮助你在Java代码中处理URI编码和解码,尤其是在需要与...
本教程将详细讲解如何在Android中实现JS与Java的双向函数调用,以及如何处理中文参数传递时的乱码问题。 1. **WebView组件** Android中的`WebView`组件是实现JavaScript与Java交互的基础。`WebView`可以加载HTML、...
- Java标准库提供了`java.net.URLDecoder` 和 `java.net.URLEncoder` 类,可以用于编码和解码URL。在某些场景下,它们可能比直接操作字符串更安全和方便。 总之,解决Java中的URL中文乱码问题需要理解URL编码的...
本主题将深入探讨“jsurl传值”与“java页面url传值中文编码&解码”的相关知识点。 首先,我们要了解URL编码。URL编码是根据RFC3986标准,对URL中的特殊字符进行转换,以避免与URL语法产生冲突。在JavaScript中,...
标题中的"java javascript good thing"表明这是一个关于Java和JavaScript实用工具的集合,这些工具可能具有高效性和多功能性。描述中的"Very useful Java and Javascript utilities. Small but powerful."进一步证实...
它们与Java的 `URLEncoder` 和 `URLDecoder` 类相似,但JavaScript的函数更专注于处理URL组件,而不是整个URL。 这些知识点在实际开发中经常遇到,例如在处理用户输入、构建动态URL、或者从服务器接收数据时。理解...
这些函数各有其特定的用途,理解和掌握它们的区别对于编写健壮的JavaScript代码至关重要。 1. `escape` 函数: `escape`方法主要用于对字符串进行编码,以便在ASCII字符集中安全地传输数据。它不会编码以下7个字符...
Java.io.CharConversionException: isHexDigit 处理详解 Java.io.CharConversionException: isHexDigit 是 Java 中一种常见的异常,通常发生在传输数据时编码不正确或 URL 传值时出现问题。本文将对该异常进行详细...
然而,Java标准库中并没有内置的`escape`函数,但我们可以使用`java.net.URLEncoder.encode()`方法来达到类似的效果,对URL中的特殊字符进行编码。这个方法会将非字母数字字符转换为百分号(`%`)加上两个十六进制数字...
在Java中,我们可以使用`java.net.URLEncoder.encode()`方法对请求参数进行编码,而在JavaScript中,对应的函数是`encodeURIComponent()`。 总结一下,使用Ajax和Java做分页技术,需要结合Struts、Hibernate和...
在使用GET请求时,尤其是当URL中含有中文参数时,应使用`java.net.URLEncoder.encode()`方法对参数进行编码,确保传输过程中的正确性。这是因为在URL中直接插入中文字符串可能会导致乱码或无法识别的问题。 #### 八...
Java提供了`java.net.URLEncoder.encode(String s)`函数用于编码URL字符串,而`java.net.URLDecoder.decode(String s)`则用于解码。 在JavaScript中,URL编码和解码的函数分别是`escape(String s)`和`unescape...
此外,Java的`java.net.URLDecoder`和`java.net.URLEncoder`类也提供了URL编码和解码的功能。 文件的编码方式有时会在文件的头部或通过其他方式指定,如XML文件的`<?xml version="1.0" encoding="UTF-8"?>`声明。在...
在JavaScript中,可以使用`encodeURIComponent()`函数进行编码,而在Java后端则需要解码,如使用`URLEncoder.decode()`方法。 6. **错误处理**:在处理Ajax请求时,我们需要考虑网络问题、服务器错误等各种异常情况...
一、基本概念 encodeURI和decodeURI是成对来使用的,因为浏览器的地址栏有中文字符的话,可以会出现不可预期的错误,所以可以encodeURI把非英文字符转化为... encodeURI()方法相当于java.net.URLEncoder.encode(URIStri
对于JSP项目中通过URL传参涉及到特殊字符的情况,正确的做法是在前端使用JavaScript的`encodeURIComponent()`函数进行编码,在后端使用Java的`URLDecoder.decode()`进行解码。这样可以确保特殊字符被正确处理,避免...
<a href="collect.jsp?name=<%=URLEncoder.encode("Сè","utf-8")%>&job=<%=URLEncoder.encode("javaܹʦ","gb2312")%>&moto=<%=URLEncoder.encode("Ŭѧϰ","gbk")%>">鿴 ``` - 接收参数时进行解码: ```java ...
例如,JavaScript的`encodeURIComponent()`和`decodeURIComponent()`函数,Python的`urllib.parse.quote()`和`urllib.parse.unquote()`方法,以及Java的`java.net.URLEncoder.encode()`和`java.net.URLDecoder....