地址栏传递中文参数乱码在js里用escape转码


Posted in Javascript onAugust 28, 2013

乱码,乱码,头大,烦,话说设置Tomcat后可以解决,但有的时候不管用了,这时,我们可以考虑转码方式不直接传中文,在js里用escape转码,记得需要用两次,如:

var str=escape("这是中文参数");

str=escape(str);

xxx.do?name=str;

在后台通过一个类的方法再转回来:

Escape.unescape(request.getParameter("name"));

Escape类如下:

package com.laneasy.hy.util; /** 
* js编转码java实现类. 
* 
* @author yangjinde 
*/ 
public class Escape { 
/** The Constant hex. */ 
private final static String[] hex = { "00", "01", "02", "03", "04", "05", 
"06", "07", "08", "09", "0A", "0B", "0C", "0D", "0E", "0F", "10", 
"11", "12", "13", "14", "15", "16", "17", "18", "19", "1A", "1B", 
"1C", "1D", "1E", "1F", "20", "21", "22", "23", "24", "25", "26", 
"27", "28", "29", "2A", "2B", "2C", "2D", "2E", "2F", "30", "31", 
"32", "33", "34", "35", "36", "37", "38", "39", "3A", "3B", "3C", 
"3D", "3E", "3F", "40", "41", "42", "43", "44", "45", "46", "47", 
"48", "49", "4A", "4B", "4C", "4D", "4E", "4F", "50", "51", "52", 
"53", "54", "55", "56", "57", "58", "59", "5A", "5B", "5C", "5D", 
"5E", "5F", "60", "61", "62", "63", "64", "65", "66", "67", "68", 
"69", "6A", "6B", "6C", "6D", "6E", "6F", "70", "71", "72", "73", 
"74", "75", "76", "77", "78", "79", "7A", "7B", "7C", "7D", "7E", 
"7F", "80", "81", "82", "83", "84", "85", "86", "87", "88", "89", 
"8A", "8B", "8C", "8D", "8E", "8F", "90", "91", "92", "93", "94", 
"95", "96", "97", "98", "99", "9A", "9B", "9C", "9D", "9E", "9F", 
"A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "A8", "A9", "AA", 
"AB", "AC", "AD", "AE", "AF", "B0", "B1", "B2", "B3", "B4", "B5", 
"B6", "B7", "B8", "B9", "BA", "BB", "BC", "BD", "BE", "BF", "C0", 
"C1", "C2", "C3", "C4", "C5", "C6", "C7", "C8", "C9", "CA", "CB", 
"CC", "CD", "CE", "CF", "D0", "D1", "D2", "D3", "D4", "D5", "D6", 
"D7", "D8", "D9", "DA", "DB", "DC", "DD", "DE", "DF", "E0", "E1", 
"E2", "E3", "E4", "E5", "E6", "E7", "E8", "E9", "EA", "EB", "EC", 
"ED", "EE", "EF", "F0", "F1", "F2", "F3", "F4", "F5", "F6", "F7", 
"F8", "F9", "FA", "FB", "FC", "FD", "FE", "FF" }; 
/** The Constant val. */ 
private final static byte[] val = { 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 
0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 
0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 
0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 
0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x01, 
0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x3F, 0x3F, 0x3F, 
0x3F, 0x3F, 0x3F, 0x3F, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x3F, 
0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 
0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 
0x3F, 0x3F, 0x3F, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x3F, 0x3F, 
0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 
0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 
0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 
0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 
0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 
0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 
0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 
0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 
0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 
0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 
0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 
0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 
0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 
0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F }; 
/** 
* Escape. 
* 
* @param s 
* the s 
* 
* @return the string 
*/ 
/** 
* 编码 
* 
* @param s 
* @return 
*/ 
public static String escape(String s) { 
if (s != null) { 
StringBuffer sbuf = new StringBuffer(); 
int len = s.length(); 
for (int i = 0; i < len; i++) { 
int ch = s.charAt(i); 
if ('A' <= ch && ch <= 'Z') { 
sbuf.append((char) ch); 
} else if ('a' <= ch && ch <= 'z') { 
sbuf.append((char) ch); 
} else if ('0' <= ch && ch <= '9') { 
sbuf.append((char) ch); 
} else if (ch == '-' || ch == '_' || ch == '.' || ch == '!' 
|| ch == '~' || ch == '*' || ch == '\'' || ch == '(' 
|| ch == ')') { 
sbuf.append((char) ch); 
} else if (ch <= 0x007F) { 
sbuf.append('%'); 
sbuf.append(hex[ch]); 
} else { 
sbuf.append('%'); 
sbuf.append('u'); 
sbuf.append(hex[(ch >>> 8)]); 
sbuf.append(hex[(0x00FF & ch)]); 
} 
} 
return sbuf.toString(); 
} 
return null; 
} 
/** 
* Unescape. 
* 
* @param s 
* the s 
* 
* @return the string 
*/ 
/** 
* 解码 说明:本方法保证 不论参数s是否经过escape()编码,均能得到正确的“解码”结果 
* 
* @param s 
* @return 
*/ 
public static String unescape(String s) { 
if (s != null) { 
StringBuffer sbuf = new StringBuffer(); 
int i = 0; 
int len = s.length(); 
while (i < len) { 
int ch = s.charAt(i); 
if ('A' <= ch && ch <= 'Z') { 
sbuf.append((char) ch); 
} else if ('a' <= ch && ch <= 'z') { 
sbuf.append((char) ch); 
} else if ('0' <= ch && ch <= '9') { 
sbuf.append((char) ch); 
} else if (ch == '-' || ch == '_' || ch == '.' || ch == '!' 
|| ch == '~' || ch == '*' || ch == '\'' || ch == '(' 
|| ch == ')') { 
sbuf.append((char) ch); 
} else if (ch == '%') { 
int cint = 0; 
if ('u' != s.charAt(i + 1)) { 
cint = (cint << 4) | val[s.charAt(i + 1)]; 
cint = (cint << 4) | val[s.charAt(i + 2)]; 
i += 2; 
} else { 
cint = (cint << 4) | val[s.charAt(i + 2)]; 
cint = (cint << 4) | val[s.charAt(i + 3)]; 
cint = (cint << 4) | val[s.charAt(i + 4)]; 
cint = (cint << 4) | val[s.charAt(i + 5)]; 
i += 5; 
} 
sbuf.append((char) cint); 
} else { 
sbuf.append((char) ch); 
} 
i++; 
} 
return sbuf.toString(); 
} 
return null; 
} 
}
Javascript 相关文章推荐
ie和firefox不兼容的解决方法集合
Apr 28 Javascript
js实现回放拖拽轨迹从过程上进行分析
Jun 26 Javascript
基于jquery实现等比缩放图片
Dec 03 Javascript
JS正则表达式比较常见用法
Jan 26 Javascript
又一枚精彩的弹幕效果jQuery实现
Jul 25 Javascript
Angularjs的ng-repeat中去除重复数据的方法
Aug 05 Javascript
AngularJS 工作原理详解
Aug 18 Javascript
js 实现一些跨浏览器的事件方法详解及实例
Oct 27 Javascript
jquery表单插件form使用方法详解
Jan 20 Javascript
JS实现二叉查找树的建立以及一些遍历方法实现
Apr 17 Javascript
详解vue引入子组件方法
Feb 12 Javascript
VueJs里利用CryptoJs实现加密及解密的方法示例
Apr 29 Javascript
在JavaScript中实现类的方式探讨
Aug 28 #Javascript
实用的Jquery选项卡TAB示例代码
Aug 28 #Javascript
jQuery实现图片信息的浮动显示实例代码
Aug 28 #Javascript
JQuery筛选器全系列介绍
Aug 27 #Javascript
HTML Color Picker(js拾色器效果)
Aug 27 #Javascript
Js中的onblur和onfocus事件应用介绍
Aug 27 #Javascript
javascript:void(0)使用探讨
Aug 27 #Javascript
You might like
解析crontab php自动运行的方法
2013/06/24 PHP
解析php中如何调用用户自定义函数
2013/08/06 PHP
推荐25款php中非常有用的类库
2014/09/29 PHP
php操作MongoDB类实例
2015/06/17 PHP
PHP配置把错误日志以邮件方式发送方法(Windows系统)
2015/06/23 PHP
laravel Task Scheduling(任务调度)在windows下的使用详解
2019/10/22 PHP
火狐浏览器(firefox)下获得Event对象以及keyCode
2008/11/13 Javascript
js 中{},[]中括号,大括号使用详解
2011/05/12 Javascript
JSON中双引号的轮回使用过程中一定要小心
2014/03/05 Javascript
JQuery记住用户名密码实现下次自动登录功能
2015/04/27 Javascript
Vue隐藏显示、只读实例代码
2018/07/18 Javascript
webpack4.x开发环境配置详解
2018/08/04 Javascript
element-ui 中的table的列隐藏问题解决
2018/08/24 Javascript
vue-cli3.0 环境变量与模式配置方法
2018/11/08 Javascript
express+vue+mongodb+session 实现注册登录功能
2018/12/06 Javascript
超好用的jQuery分页插件jpaginate用法示例【附源码下载】
2018/12/06 jQuery
微信小程序实现页面浮动导航
2019/01/28 Javascript
mocha的时序规则讲解
2019/02/16 Javascript
基于JavaScript实现表格隔行换色
2020/05/08 Javascript
Vue将props值实时传递 并可修改的操作
2020/08/09 Javascript
[01:44]剑指西雅图 展望TI之CIS战队专访
2014/06/25 DOTA
python测试驱动开发实例
2014/10/08 Python
Python连接mssql数据库编码问题解决方法
2015/01/01 Python
Python小进度条显示代码
2019/03/05 Python
pyqt5让图片自适应QLabel大小上以及移除已显示的图片方法
2019/06/21 Python
用pyqt5 给按钮设置图标和css样式的方法
2019/06/24 Python
python实现ip代理池功能示例
2019/07/05 Python
python实现监控阿里云账户余额功能
2019/12/16 Python
win10系统下python3安装及pip换源和使用教程
2020/01/06 Python
python 基于卡方值分箱算法的实现示例
2020/07/17 Python
基于CSS3实现的黑色个性导航菜单效果
2015/09/14 HTML / CSS
澳大利亚在线性感内衣商店:Fantasy Lingerie
2021/02/07 全球购物
火锅店创业计划书范文
2014/02/02 职场文书
元旦寄语大全
2014/04/10 职场文书
自我评价优缺点范文
2015/03/11 职场文书
导游词之神仙居景区
2019/11/15 职场文书