URLEncoder and JavaScript encodeURIComponent
Recently our system ran into a trouble about authentication. So I dive into the implementation we did in auth. I take part to design that, but I am not 100% know about the implementation.
After investigation, I found the problem.
The issue is coming from the way server side and client side encoding the string, not about the “special” characters.
I just read the server side source codes, I just know that we are using java.net.URLEncoder from JDK to do the encoding. Doc is here for references: http://docs.oracle.com/javase/1.5.0/docs/api/java/net/URLEncoder.html
And the client JS side is using encodeURLComponent() which is Similar. Doc is here for references: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent
So here comes the problem, the 2 encoding ways are similar, not exactly the same. The difference characters are ~'()! and "+”. We need to do something like this in server side or client side if we want to keep the auth changes as small as possible:
public static String encodeURIComponent(String component) {
String result = null;
try {
result = URLEncoder.encode(component, "UTF-8")
.replaceAll("\\%28", "(")
.replaceAll("\\%29", ")")
.replaceAll("\\+", "%20")
.replaceAll("\\%27", "'")
.replaceAll("\\%21", "!")
.replaceAll("\\%7E", "~");
} catch (UnsupportedEncodingException e) {
result = component;
}
return result;
}
By the way, why we need encoding for our string, because we do calculate query string in URL and post body. We just want to make sure it is the same thing after server side receive the query string in URL and post body.
References:
https://gist.github.com/declanqian/7892516
http://stackoverflow.com/questions/607176/java-equivalent-to-javascripts-encodeuricomponent-that-produces-identical-outpu
http://www.technicaladvices.com/2012/02/20/java-encoding-similiar-to-javascript-encodeuricomponent/
JS Doc
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent
Java Doc
http://docs.oracle.com/javase/1.5.0/docs/api/java/net/URLEncoder.html
- 浏览: 2543069 次
- 性别:
- 来自: 成都
最新评论
-
nation:
你好,在部署Mesos+Spark的运行环境时,出现一个现象, ...
Spark(4)Deal with Mesos -
sillycat:
AMAZON Relatedhttps://www.godad ...
AMAZON API Gateway(2)Client Side SSL with NGINX -
sillycat:
sudo usermod -aG docker ec2-use ...
Docker and VirtualBox(1)Set up Shared Disk for Virtual Box -
sillycat:
Every Half an Hour30 * * * * /u ...
Build Home NAS(3)Data Redundancy -
sillycat:
3 List the Cron Job I Have>c ...
Build Home NAS(3)Data Redundancy
相关推荐
其中,`encodeURIComponent()` 与Java的 `URLEncoder.encode()` 类似,适用于大多数情况,因为它不会编码 `/`、`:`、`;`、`?`、`@`、`&`、`=`、`+` 和 `,` 这些在URL中具有特殊意义的字符。 总结来说,理解并正确...
这个实现首先使用`URLEncoder.encode()`方法将字符串`s`编码为UTF-8格式,然后使用`replaceAll()`方法进行额外的转换,以确保与JavaScript的`encodeURIComponent`函数行为一致。 对于解码,我们有`...
总结来说,理解并正确使用`escape`、`encodeURI`和`encodeURIComponent`是JavaScript开发中的重要技能,它们有助于确保数据在网络中的安全传输和正确解析。在处理URL、查询参数或其他需要编码的数据时,要根据具体...
在JavaScript中,`DOMParser`和`XMLSerializer`可用于解析和序列化XML文档,而`encodeURIComponent`和`decodeURIComponent`函数则可处理URL编码。 3. **Utilities.java and Utilities.js**: 这两个文件可能分别...
在JavaScript中,有两个主要的方法用于对URL进行编码:`encodeURI()` 和 `encodeURIComponent()`。 1. `encodeURI()` `encodeURI()` 函数用于对整个URL进行编码,但不会编码某些特定字符,这些字符包括:`:/?#[]@!$...
在JavaScript端,可以使用`encodeURIComponent()`和`decodeURIComponent()`。 7. **安全注意事项** 使用`JavaScriptInterface`时需要注意安全,因为它允许JavaScript直接访问Java对象。为了防止恶意JavaScript代码...
- Java标准库提供了`java.net.URLDecoder` 和 `java.net.URLEncoder` 类,可以用于编码和解码URL。在某些场景下,它们可能比直接操作字符串更安全和方便。 总之,解决Java中的URL中文乱码问题需要理解URL编码的...
在JavaScript中,我们可以使用`encodeURIComponent()`函数来编码URL参数。这个函数会将非字母数字字符转换为"%xy"的形式,其中xy是该字符的UTF-8编码的十六进制表示。例如,中文字符“中文”会被编码为"%E4%B8%AD%E6...
在JavaScript中,可以使用`encodeURIComponent()`函数进行编码,而在Java后端则需要解码,如使用`URLEncoder.decode()`方法。 6. **错误处理**:在处理Ajax请求时,我们需要考虑网络问题、服务器错误等各种异常情况...
一、基本概念 encodeURI...”,encodeURIComponent方法可以对这些字符进行编码。 decodeURI()方法相当于java.net.URLDecoder.decode(URIString, “UTF-8”); encodeURI()方法相当于java.net.URLEncoder.encode(URIStri
在Java中,我们可以使用`java.net.URLEncoder.encode()`方法对请求参数进行编码,而在JavaScript中,对应的函数是`encodeURIComponent()`。 总结一下,使用Ajax和Java做分页技术,需要结合Struts、Hibernate和...
对于JSP项目中通过URL传参涉及到特殊字符的情况,正确的做法是在前端使用JavaScript的`encodeURIComponent()`函数进行编码,在后端使用Java的`URLDecoder.decode()`进行解码。这样可以确保特殊字符被正确处理,避免...
2. **JavaScript内置函数**:在JavaScript中,可以通过内置函数`encodeURI()`和`encodeURIComponent()`来实现URL的编码。`encodeURI()`用于整个URL的编码,而`encodeURIComponent()`用于URL的组成部分(如查询字符串...
举例来说,如果你有一个包含特殊字符的JavaScript字符串,你可能需要先使用`escape`(或`encodeURIComponent`)函数进行编码,然后将结果插入到HTML页面的`<script>`标签内。当JavaScript引擎解析这个字符串时,它会...
5. **JS URL Code**:在JavaScript中,处理URL编码与解码的函数是 `encodeURIComponent()` 和 `decodeURIComponent()`。前者用于对URL的组成部分进行编码,而后者则用于解码。它们与Java的 `URLEncoder` 和 `...
- 在客户端使用JavaScript的`encodeURI()`或`encodeURIComponent()`函数对参数进行编码。 - 示例代码:`var url = "play.jsp?keyWord=" + encodeURIComponent(keyWord);` 2. **服务器端解码**: - 使用Java的`...
不过,现代JavaScript更推荐使用`encodeURIComponent()`和`decodeURIComponent()`来编码和解码URL,因为它们更全面,能正确处理更多字符。 在HTML中,存在一些需要转义的字符,如`&`(`&`)、`(`<`)、`>`...
注意,`URLEncoder.encode()`将空格转换为"+",而JavaScript的`encodeURIComponent()`则转换为"%20"。因此,在前后端交互时,要确保使用相同的方式进行解码,以避免出现解析错误。 URL中的特殊字符有不同的含义,...
可以使用JavaScript的`encodeURIComponent()`函数来确保URL编码使用UTF-8,这样服务器在接收到请求时,只要也使用UTF-8进行解码,就能正确处理中文参数。 以下是一个简单的示例: ```javascript var msg = "杭州";...
例如,JavaScript的`encodeURIComponent()`和`decodeURIComponent()`函数,Python的`urllib.parse.quote()`和`urllib.parse.unquote()`方法,以及Java的`java.net.URLEncoder.encode()`和`java.net.URLDecoder....