`
zengshaotao
  • 浏览: 792488 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

两次encodeURI和URLDecode的原理分析

 
阅读更多

当使用地址栏提交查询参数时,如果不编码,非英文字符会按照操作系统的字符集进行编码提交到服务器,服务器会按照配置的字符集进行解码,所以如果两者不一致就会导致乱码。如果只进行一次encodeURI,因为encodeURI函数采用UTF-8对URL进行编码,所以如果服务器在进行解码时使用的是其他的编码方式就会出现乱码,默认的服务器配置的解码字符集都不是UTF-8,所以大部分情况下地址栏提交中文查询参数时会产生乱码;针对这种情况,可以连续使用两次encodeURI在客户端(主要指浏览器)对非英文字符进行编码,然后在服务端使用java.net.URLDecoder(String."UTF-8")解码,即可得到正确的中文。

 

原理:

.encodeURL函数主要是来对URI来做转码,它默认是采用的UTF-8的编码.
. UTF-8编码的格式:一个汉字来三个字节构成,每一个字节会转换成16进制的编码,同时添加上%号.

假设页面端输入的中文是一个“中”,按照下面步骤进行解码

1.第一次encodeURI,按照utf-8方式获取字节数组变成[-28,-72-83],对字节码数组进行遍历,把每个字节转化成对应的16进制数,这样就变成了[E4,B8,AD],最后变成[%E4,%B8,%AD]  此时已经没有了多字节字符,全部是单字节字符。

2、第二次encodeURI,进行编码,会把%看成一个转义字符,并不编码%以后字符,会把%编码成%25.把数组最后变成[%25E4,%25B8,%25AD]然后就把处理后的数据[%25E4,%25B8,%25AD]发往服务器端,
当应用服务器调用getParameter方法,getParameter方法会去向应用服务器请求参数
应用服务器最初获得的就是发送来的[%25E4,%25B8,%25AD],应用服务器会对这个数据进行URLdecode操作,应用服务器进行解码的这一次,不管是按照UTF-8,还是GBK,还是ISO-8859,,都能得到[%E4,%B8,%AD],因为都会把%25解析成%.并把这个值返回给getParameter方法

3\、再用UTF-8解码一次,就得到"中"了。

分享到:
评论

相关推荐

    JS的encodeURI和java的URLDecoder.decode使用介绍

    如果不想在url中看到有明文,比如http://localhost:8080/template_1/login.action?user=张三 可以使用js的encodeURI的URLDecoder.decode一起使用一起来把url加密下 (1)JS在页面上把数据var val = encodeURI...

    用JavaScript实现UrlEncode和UrlDecode的脚本代码

    在深入理解JavaScript实现UrlEncode和UrlDecode函数的过程中,我们需要理解几个关键点:首先,URL编码和解码在Web开发中是一种常见的需求,用于确保URL中的特殊字符被正确传输。其次,JavaScript提供了一些内置的...

    URL传中文参数导致乱码的解决方案之encodeURI

    在互联网应用中,URL(统一资源定位符)用于标识网页和其他网络资源的位置。然而,当URL需要传递包含中文字符的参数时,由于...本文提供的“前端两次encode——后端一次decode”方案,是一种兼容性好且相对安全的做法。

    JS的encodeURI和java的URLDecoder.decode使用介绍.docx

    通过上述介绍,我们可以了解到使用`encodeURI`和`URLDecoder.decode`可以有效地对URL中的参数进行加密处理,从而提高URL的安全性和隐私性。但在实际应用中还需要注意字符集的一致性、编码解码的过程控制等问题,以...

    用JavaScript实现PHP的urlencode与urldecode函数

    针对这个问题,我们可以创建两个 JavaScript 函数:`js_urlencode` 和 `js_urldecode`,以实现与 PHP 相似的编码和解码功能。以下是一个基于UTF-8编码的实现: ```javascript // 1. JavaScript 实现的 urlencode ...

    javaScript encodeURI中文乱码

    即在发送中文参数前,先执行一次`encodeURI()`,然后再对结果再次执行`encodeURI()`,确保所有字符都被充分编码。接收方同样需要进行相应的解码处理。 4. **修改服务器配置** 对于服务器端的处理,可以考虑修改...

    Javascript UrlDecode函数代码

    在给定的代码中,作者提供了两个自定义的函数:`ShengUtils.encode`和`ShengUtils.decode`,分别实现了这个功能。 `ShengUtils.encode`函数的主要任务是对输入的字符串`unzipStr`进行URL编码。它首先创建一个空字符...

    ASP中实现的URLEncode、URLDecode自定义函数

    在做ajax中的post时,发现在服务器端取得数据时总是乱码,网上看了些解决方法也搞不定,我post过去时是xml形式,由于乱码服务器端xml也解析不了或出错。于是在post前先把它编码,到...Function URLDecode(enStr)  dim

    js中escape对应的C#解码函数 UrlDecode

    本文将详细探讨JavaScript中的`escape`函数及其C#对应的解码方法`System.Web.HttpUtility.UrlDecode`,同时也会讲解JavaScript中的`escape`、`encodeURI`和`encodeURIComponent`的区别以及它们的解码对应函数。...

    javascript中encodeURI和decodeURI方法使用介绍.docx

    除了`encodeURI`和`decodeURI`之外,JavaScript还提供了另外两个相关的函数: - **encodeURIComponent**: 类似于`encodeURI`,但是它会对更多的字符进行编码,包括“:”、“/”、“?”、“#”、“;”、“=”以及“&...

    js的encodeUri编码转换为GBK问题

    在JavaScript中,`encodeURI`函数是用来对URI(统一资源标识符)进行编码的,它遵循RFC 3986标准,保留了某些特殊字符不被编码,如空格被编码为`+`,这对于HTTP请求是必要的。然而,当我们需要处理中文或其他非ASCII...

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

    - **二次转码**:先使用`encodeURI()` 编码一次,再用`encodeURIComponent()` 编码一次,这样URL中的特殊字符都会被编码。在服务器端,使用`URLDecoder.decode(name, "UTF-8")` 进行解码。 2. **Java服务器端处理*...

    Jquery serialize() 中文乱码及解决方法

    Jquery serialize() 方法的中文乱码问题可以通过 decodeURIComponent 方法和两次 encodeURI 方法来解决。同时,在服务器端,我们需要使用 java.net.URLDecoder.decode 方法来将数据还原成原始的中文数据。

    JSP中js传递和解析URL参数以及中文转码和解码问题

    1.传递参数: 代码如下: var pmt = ‘sensor=’+ encodeURI(encodeURI(sensor))+’&device=’+encodeURI(encodeURI(device))+’&instrument=’;...接收和解析参数 代码如下: //获取URL参数 function GetRequest()

    JavaScript encodeURI 和encodeURIComponent

    encodeURI和encodeURIComponet函数都是javascript中用来对URI进行编码,将相关参数转换成UTF-8编码格式的数据。URI在进行定位跳转时,参数里面的中文、日文等非ASCII编码都会进行编码转换

    url传值异常java.io.CharConversionException: isHexDigit

    在上述例子中,使用了两次`encodeURI`,这是因为对于某些特定字符,一次编码可能不足以产生有效的URL编码。 代码示例: ```javascript var url = "b.jsp?name=" + u_name; url = encodeURI(url); // 由于某些字符...

    encodeURIComponent encodeURI 中文转GBK编码

    serialize , encodeURIComponent encodeURI 中文转成GBK编码 encodeURIComponent encodeURI 默认转 utf-8 ;重写方法 转成GBK

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

    常见的三种编码方法是`escape`、`encodeURI`和`encodeURIComponent`。这些函数各有其特定的用途,理解和掌握它们的区别对于编写健壮的JavaScript代码至关重要。 1. `escape` 函数: `escape`方法主要用于对字符串...

    javascript encodeURI和encodeURIComponent的比较

    在进行SaaS前端开发的时候,大家经常会用到两个JavaScriptNative函数:encodeURI 和 encodeURIComponent。这篇文章详细解释这两个函数的用途并比较它们的不同之处

Global site tag (gtag.js) - Google Analytics