`
sillycat
  • 浏览: 2539700 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

URLEncoder and JavaScript encodeURIComponent

 
阅读更多

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

分享到:
评论

相关推荐

    java中URLEncoder.encode与URLDecoder.decode处理url特殊参数的方法

    其中,`encodeURIComponent()` 与Java的 `URLEncoder.encode()` 类似,适用于大多数情况,因为它不会编码 `/`、`:`、`;`、`?`、`@`、`&`、`=`、`+` 和 `,` 这些在URL中具有特殊意义的字符。 总结来说,理解并正确...

    java 中类似js encodeURIComponent 函数的实现案例

    这个实现首先使用`URLEncoder.encode()`方法将字符串`s`编码为UTF-8格式,然后使用`replaceAll()`方法进行额外的转换,以确保与JavaScript的`encodeURIComponent`函数行为一致。 对于解码,我们有`...

    JS中三种编码方式(escape,encodeURI,encodeURIComponent)

    总结来说,理解并正确使用`escape`、`encodeURI`和`encodeURIComponent`是JavaScript开发中的重要技能,它们有助于确保数据在网络中的安全传输和正确解析。在处理URL、查询参数或其他需要编码的数据时,要根据具体...

    java javascript good thing

    在JavaScript中,`DOMParser`和`XMLSerializer`可用于解析和序列化XML文档,而`encodeURIComponent`和`decodeURIComponent`函数则可处理URL编码。 3. **Utilities.java and Utilities.js**: 这两个文件可能分别...

    JavaScript给url网址进行encode编码的方法

    在JavaScript中,有两个主要的方法用于对URL进行编码:`encodeURI()` 和 `encodeURIComponent()`。 1. `encodeURI()` `encodeURI()` 函数用于对整个URL进行编码,但不会编码某些特定字符,这些字符包括:`:/?#[]@!$...

    android中js与java间函数相互调用demo,支持中文传参,无乱码

    在JavaScript端,可以使用`encodeURIComponent()`和`decodeURIComponent()`。 7. **安全注意事项** 使用`JavaScriptInterface`时需要注意安全,因为它允许JavaScript直接访问Java对象。为了防止恶意JavaScript代码...

    java中文乱码之解决URL中文乱码问题的方法

    - Java标准库提供了`java.net.URLDecoder` 和 `java.net.URLEncoder` 类,可以用于编码和解码URL。在某些场景下,它们可能比直接操作字符串更安全和方便。 总之,解决Java中的URL中文乱码问题需要理解URL编码的...

    jsurl传值java页面url传值中文编码&解码共2页

    在JavaScript中,我们可以使用`encodeURIComponent()`函数来编码URL参数。这个函数会将非字母数字字符转换为"%xy"的形式,其中xy是该字符的UTF-8编码的十六进制表示。例如,中文字符“中文”会被编码为"%E4%B8%AD%E6...

    Ajax百度搜索项目实例源码整理

    在JavaScript中,可以使用`encodeURIComponent()`函数进行编码,而在Java后端则需要解码,如使用`URLEncoder.decode()`方法。 6. **错误处理**:在处理Ajax请求时,我们需要考虑网络问题、服务器错误等各种异常情况...

    javascript中encodeURI和decodeURI方法使用介绍

    一、基本概念 encodeURI...”,encodeURIComponent方法可以对这些字符进行编码。 decodeURI()方法相当于java.net.URLDecoder.decode(URIString, “UTF-8”); encodeURI()方法相当于java.net.URLEncoder.encode(URIStri

    ajax和java 做分页技术

    在Java中,我们可以使用`java.net.URLEncoder.encode()`方法对请求参数进行编码,而在JavaScript中,对应的函数是`encodeURIComponent()`。 总结一下,使用Ajax和Java做分页技术,需要结合Struts、Hibernate和...

    jsp传参特殊字符

    对于JSP项目中通过URL传参涉及到特殊字符的情况,正确的做法是在前端使用JavaScript的`encodeURIComponent()`函数进行编码,在后端使用Java的`URLDecoder.decode()`进行解码。这样可以确保特殊字符被正确处理,避免...

    js将网址转为urlencode类型

    2. **JavaScript内置函数**:在JavaScript中,可以通过内置函数`encodeURI()`和`encodeURIComponent()`来实现URL的编码。`encodeURI()`用于整个URL的编码,而`encodeURIComponent()`用于URL的组成部分(如查询字符串...

    java版本的escape和unescape函数

    举例来说,如果你有一个包含特殊字符的JavaScript字符串,你可能需要先使用`escape`(或`encodeURIComponent`)函数进行编码,然后将结果插入到HTML页面的`<script>`标签内。当JavaScript引擎解析这个字符串时,它会...

    java net unicode / native2ascii / url decode / url encode / UTF8 / js url code

    5. **JS URL Code**:在JavaScript中,处理URL编码与解码的函数是 `encodeURIComponent()` 和 `decodeURIComponent()`。前者用于对URL的组成部分进行编码,而后者则用于解码。它们与Java的 `URLEncoder` 和 `...

    get方式传参中文乱码问题的解决方案

    - 在客户端使用JavaScript的`encodeURI()`或`encodeURIComponent()`函数对参数进行编码。 - 示例代码:`var url = "play.jsp?keyWord=" + encodeURIComponent(keyWord);` 2. **服务器端解码**: - 使用Java的`...

    学习java开发中的特殊字符.pdf

    不过,现代JavaScript更推荐使用`encodeURIComponent()`和`decodeURIComponent()`来编码和解码URL,因为它们更全面,能正确处理更多字符。 在HTML中,存在一些需要转义的字符,如`&`(`&`)、`(`<`)、`>`...

    GET 方式提交的含有特殊字符的参数

    注意,`URLEncoder.encode()`将空格转换为"+",而JavaScript的`encodeURIComponent()`则转换为"%20"。因此,在前后端交互时,要确保使用相同的方式进行解码,以避免出现解析错误。 URL中的特殊字符有不同的含义,...

    jspurl中中文参数的乱码解决.docx

    可以使用JavaScript的`encodeURIComponent()`函数来确保URL编码使用UTF-8,这样服务器在接收到请求时,只要也使用UTF-8进行解码,就能正确处理中文参数。 以下是一个简单的示例: ```javascript var msg = "杭州";...

    url编码表,转换编码

    例如,JavaScript的`encodeURIComponent()`和`decodeURIComponent()`函数,Python的`urllib.parse.quote()`和`urllib.parse.unquote()`方法,以及Java的`java.net.URLEncoder.encode()`和`java.net.URLDecoder....

Global site tag (gtag.js) - Google Analytics