`

encodeURIComponent编码2次原因

阅读更多
两侧encodeURIComponent是因为第一次encodeURIComponent的时辰呈现了"%",这个符号在解析参数的时辰是无法解析的,必须把"%"也进行编码,"%"编码后就是"%25",如许就不会呈现题目了。

一般景象下, 发送 encodeURIComponent(parmeName)+"="+encodeURIComponent(parmeValue);
接管时, 直接 String paramValue = request.getParameter(paramName); // 容器主动解码.

我们知道 encodeURIComponent 应用的是 UTF-8 编码规矩来编的.
若是 request.getParameter(paramName) 时,容器也按 UTF-8 解的话,是正确的. 底子无须在客户端
进行二次的 encodeURIComponent(...)


若是 request.getParameter(paramName),容器没有按 UTF-8 解的话, 成果只有一个,就是乱码!
容器按什么编码来解码,决意于 request.setCharacterEncoding(***) 或者 办事器法度设备.

若是你在 jsp 法度中,可以或许 request.setCharacterEncoding("UTF-8"), 并且 批改办事器设备,让容器在解 GET 提交的参数时,应用 UTF-8.

客户端提交前不消二次编码, 接管时,也只要直接 request.getParameter(paramName) 即可

---------------------

为什么网上会有人提出在客户端对字符串反复编码两次呢.
若是因为项目须要,不克不及指定容器应用何种编码规矩来解码提交的参数, 比如:须要接管来自不合页面,不地编码的参数内容时。 (又或者是开辟人员被这有点错杂的东东搞得晕头转向,不懂得如何正确的去做好这接管参数的工作)
这个时辰,在客户端对参数进行二次编码,可以有效的避开“提交多字节字符”的这个棘手题目。
因为第一次编码,你的参数内容便不带有多字节字符了,成了纯粹的 Ascii 字符串。(这里把编第一次的成果叫成 [STR_ENC1] 好了。[STR_ENC1] 是不带有多字节字符的)
再编一次后,提交,接管时容器主动解一次 (容器主动解的这一次,不管是按 GBK 还是 UTF-8 还是 ISO-8859-1 都好,都可以或许正确的获得 [STR_ENC1])
然后,再在法度中实现一次 decodeURIComponent (Java中凡是应用 java.net.URLDecoder(***, "UTF-8")) 就可以获得想提交的参数的原值。
分享到:
评论
1 楼 中国凉茶 2013-02-05  
    

相关推荐

    encodeURIComponent编码后java后台的解码

    同学的毕业设计出现JavaScript用encodeURIComponentt编码后无法再后台解码的问题。 原来他是这样写的: window.self.location="searchbytext.action?searchtext="+encodeURIComponent(seartext);

    encodeURIComponent encodeURI 中文转GBK编码

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

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

    本文将详细探讨三种主要的编码方法:`escape()`, `encodeURI()`, 和 `encodeURIComponent()`,并解释它们之间的区别和应用场景。 首先,`escape()` 方法并不常用于现代Web开发,但它仍然是JavaScript内置的一个函数...

    escape、encodeURI、encodeURIComponent 区别详解

    `encodeURIComponent()` 也是用来编码字符串,但它的作用范围更加狭窄,只编码 URI 的组成部分,如查询字符串或片段标识符等。相较于 `encodeURI()`,`encodeURIComponent()` 对 `-_.!~*'()` 这些字符进行了编码,...

    encodeURIComponent 文档

    #### 二、encodeURIComponent与encodeURI的功能介绍 1. **`encodeURIComponent`**: - `encodeURIComponent`函数主要用于对字符串中的特定字符进行编码,使之能够安全地用作URL的一部分。 - 它可以编码除了字母、...

    url的三个js编码函数escape(),encodeURI(),encodeURIComponent()简介

    ### URL的三个JS编码函数:`escape()`, `encodeURI()`, `encodeURIComponent()` 简介 在Web开发中,经常遇到的一个问题是URL传递中文字符时出现乱码的情况。为了解决这一问题,JavaScript提供了几种不同的编码方法...

    Javascript中escape(),_encodeURI()和encodeURIComponent()之精析与比较.doc

    在JavaScript中,`escape()`, `encodeURI()`, 和 `encodeURIComponent()` 是三个常见的字符串编码函数,它们各自有独特的用途和特点。理解它们的区别对于编写健壮的JavaScript代码至关重要。 首先,`escape()` 函数...

    JS实现URL编码转换中文

    由于URL传输限制及浏览器解析原因,中文等非ASCII字符需要被编码为特定格式才能在网络上传输。本文将详细介绍如何使用JavaScript进行URL编码转换,并提供一个具体的示例来帮助理解这一过程。 #### 一、URL编码基础...

    URL编码 URL编码

    在实际编程中,大多数编程语言都提供了内置函数来自动进行URL编码和解码,如JavaScript的`encodeURIComponent()`和`decodeURIComponent()`,Python的`urllib.parse.quote()`和`urllib.parse.unquote()`等。...

    js gb2312编码

    百度URL编码,是指在使用百度搜索引擎时,如果URL中包含非ASCII字符,比如中文汉字,百度会将其转换为对应的百分号编码(%XX形式,XX为该字符在UTF-8编码下的二进制表示)。在JavaScript中,我们可以使用`encodeURI...

    URL编码转换,escape() encodeURI() encodeURIComponent()

    escape() 方法:采用ISO Latin字符集对指定的字符串进行编码。所有的空格符、标点符号、特殊字符以及其他非ASCII字符都将被转化成%xx格式的字符编码(xx等于该字符在字符集表里面的编码的16进制数字)。比如,空格...

    js中编码函数:escape,encodeURI与encodeURIComponent详解

    其它情况下escape,encodeURI,encodeURIComponent编码结果相同。  escape对0-255以外的unicode值进行编码时输出%u****格式  可以使用 unescape() 对 escape() 编码的字符串进行解码。  ECMAScript v3 反对使用该...

    解析URL和文件的编码方式

    编码过程通常由编程语言提供的内置函数自动完成,如JavaScript的`encodeURIComponent()`函数。 文件编码则涉及到文件内容的存储方式。常见的文本文件编码有ASCII、UTF-8、GBK等。ASCII是最基础的编码,只包含128个...

    深入解析:JavaScript中的`encodeURIComponent`与`decodeURIComponent`方法

    encodeURIComponent和decodeURIComponent是JavaScript中处理URL编码和解码的重要工具。它们在Web开发中的应用广泛,对于确保数据的正确传输和处理至关重要。通过本文的详细介绍和示例代码,你应该能够理解这两个函数...

    js对中文字符串进行gb2312编码解码

    总结一下,JavaScript中的GB2312编码和解码涉及到Unicode和二进制编码的转换,需要自定义函数来完成。理解编码和解码的过程以及相关的JavaScript函数,有助于我们在处理中文字符时避免乱码问题。在实际开发中,应...

    JavaScript、JavaWeb对汉字等的编码与解码处理

    在本资源中,我们将详细介绍JavaScript和JavaWeb对汉字编码的策略,包括escape、encodeURI、encodeURIComponent等编码函数的使用,以及对应的解码函数unescape、decodeURI、decodeURIComponent的使用。 一、escape...

Global site tag (gtag.js) - Google Analytics