js编码后提交java解码
地址栏中出现汉字的情况有两种,一种是汉字出现在URL的路径部分,一种是汉字出现在URL的传参的部分,第二种情况的时候必须采用编码后传参,接受时解码的方式完成传参。js中编码有escape(),encodeURI(),encodeURIComponent()三个常用的方法,escape()常常用在提交页面和处理页面的编码格式相同的情况下(比如它们都是GB2312),encodeURI()和encodeURIComponent()的用法基本相同,区别在于encodeURIComponent()也对"?"等特殊字符进行编码。
一开始遇到中文参数的时候,使用encodeURI()进行了一遍编码,传过去后,发现解码出现问题,于是想到可能是编码方法使用错误,于是使用escape()方法,这时发现解码时抛出isHexDigit异常。借助百度搜索isHexDigit异常,
发现原来,是escape()方法造成了异常,同时了解了浏览器传递地址的一些原理,在浏览器地址栏里,浏览器认为%是个转义字符,浏览器会把%与%之间的编码,两位两位取出后进行解码,然后再传递给处理页面,
然后由处理页面进行再次解码。由此我想到一直使用encodeURI方法是正确的,只是需要使用两次encodeURI方法,例如encodeURI(encodeURI("中文"));第一次是把中文编码成%xy的格式,
第二次是对%xy中的%进行编码,%编码成%25。整个传参过程大体应该是:提交页面使用encodeURI(encodeURI("中文"))编码,把最后的编码结果%25xy传递给处理页面的过程中,浏览器获取URL地址
(注意openModelDialog方法,浏览器获取不到参数编码)后解码成%xy,然后把%xy传递给处理页面,处理页面使用URLDecoder.decode(request.getParameter("参数名"),"UTF-8");完成解码。
总结:
1、汉字出现在URL路径部分的时候不需要编码解码;
2、使用encodeURI进行2次编码;
3、在openModelDialog()打开的模式窗体里没办法用request.getParameter正确获取参数;
客户端和服务器在传递数据时可以用过滤器filter解决字符编码问题,但filter只能解决post方式提交的数据。对于get方式,可以使用两次encodeURI(encodeURI(“中文”))并在服务器中使用URLDecoder.decode(“中文”, "UTF-8");
今天用Ajax校验数据时也遇到这个问题,尽管页面、类和web容器都统一了字符编码,提交的数据依然是乱码,所以就采用了2次encodeURI()编码方式,乱码问题就解决了。
页面
/exportExcel.topinfo?ls="+encodeURI(encodeURI(_tmplsgx))+"&zt="+encodeURI(encodeURI(_tmpzt))s
action中
String ls=request.getParameter("ls");
ls = new String(ls.getBytes("iso-8859-1"),"utf-8");
ls = java.net.URLDecoder.decode(ls,"UTF-8");
转载于:https://blog.51cto.com/liuya2012/1039512
js编码后提交java解码相关推荐
- html url js编码顺序,浏览器的解码顺序(html解码、url解码以及js解码)
<html> <head> <meta http-equiv="Content-Type" content="text/html; char ...
- js编码scape 解码unescape
str=escape(yourStr) yourStr=unescape(str) 后台默认utf-8 所以 由js跳到后台是不用解密的 前台 <a target='_blank' href=' ...
- xss编码绕过详解(更像是在介绍实体编码和JS编码的解析过程)
xss编码绕过详解(更像是在介绍实体编码和JS编码的解析过程) 注:本文通过研究各种情况下实体编码和JS编码是否生效,进而总结了哪些情况下能够进行编码后,javascript代码依然能够正常执行. 解 ...
- Js编码和Java后台解码
注: 在使用get提交,url传递参数的时候,会带来中文乱码的问题,对此可以使用js编码来解决. Js编码的几种方式区别: 1.window.escape()与HttpUtility.UrlEncod ...
- js编码java解码_Js编码和Java后台解码
注: 在使用get提交,url传递参数的时候,会带来中文乱码的问题,对此可以使用js编码来解决. Js编码的几种方式区别: 1.window.escape()与HttpUtility.UrlEncod ...
- Python 技术篇 - 使用unicode_escape对js的escape()方法编码后的字符串进行解码实例演示
这是 javascript 的 escape() 编码后的效果. 这是 python 的解码过程: xpath = '%f%t%u90E8%u95E8%u6210%u7ACB%u65F6%u95F4% ...
- java 解码 encodeuri_encodeURIComponent编码后java后台的解码
解决方法一: JavaScript: window.self.location="searchbytext.action?searchtext="+encodeURICompone ...
- js编码java解码_常用的js、java编码解码方法
前言 前后端直接传输数据进行交互不就行了吗,为什么还要进行编码解码?正常情况下直接交互没问题,但当有类似以下情况出现时就需要进行编码再进行传输: 1.编码格式难以统一,导致数据交互过程出现中文乱码等问 ...
- java 解码 encodeuri_js与java encodeURI 进行编码与解码
//网上一堆废话 内置不用写一堆文件处理真是蛋疼 JS escape()使用转义序列替换某些字符来对字符串进行编码 JavaScript 中国 编码后 JavaScript%u4E2D%u56FD u ...
- js 编码、解码与asp.net 编码、解码
js对URL提供:escape,encodeURI,encodeURIComponent 的编码方法encodeURIComponent:推荐使用,它是将中文.韩文等特殊字符转换成utf-8格式的ur ...
最新文章
- 大数据之公开数据的价值
- 怎么知道 网站是否直接明文保存密码_忘记账号密码 浏览器记住了 怎么找回密码?...
- 小程序swiper(tab)高度自适应
- JVM_垃圾收集器与内存分配策略01
- C指针原理(38)-C快速入门
- python程序设计基础考试题库及答案_智慧职教Python程序设计基础题库及答案
- 【dfs】病毒(jzoj 1284)
- SVG格式的Icon,用了你就知道有多香
- ssh : how to add hostkey to “know_hosts”
- C#LeetCode刷题之#374-猜数字大小(Guess Number Higher or Lower)
- mysql 语句账号注入_mysql中SQL语句的注入问题
- MySQL查询语句执行过程及性能优化-基本概念和EXPLAIN语句简介
- 说下自己看源码的一点经验(Python Web 相关)
- MATLAB 线性运算之图像相加去噪
- struts1:Struts的中央控制器
- vue 萤石云视频监控对接
- 十分钟快速讲明白K均值聚类算法
- Linux消息队列及函数详解(含示例)
- 求方程式ax2bxc0的根c语言,2019-03-09 C语言学习12-求ax^2+bx+c=0方程的根
- 计算机 在哪看是什么32位,如何查看自己的电脑是32位的还是64位