简单实例处理url特殊符号&处理(2种方法)


Posted in Javascript onApril 02, 2013

我遇到的问题是:url里的参数内容包含&符合,我有两种方法解决
其一方法是:在页面用JS转码,例子如下(前端处理)

<a href="#" onclick="test('${group.type}','${group.cn }')">${group.cn })</a> 
<script language="javascript"> 
function test(a,b){ 
alert("test"); 
location.href='groupsDetailServlet?groupTypeForDetail=' + a + '&cn=' + encodeURIComponent(b); 
} 
</script>

其二方法是:在后端处理
1>jsp:
<a href="groupsDetailServlet?cn=${group.encodedCN }&groupTypeForDetail=${GroupType}"+>${group.cn }</a>

2>java bean: group
String cn;//要显示的CN 
String encodedCN;//当参数传的CN 
public Group(String cn) { this(); this.cn = cn; this.encodedCN =LdapUtil.encodeURLStr(cn); } 
public void setCn (String name) { this.cn = name; setEncodedCN(LdapUtil.encodeURLStr(cn)); } 
public String getCn () { return cn; } 
public String getEncodedCN () { return encodedCN; } 
public void setEncodedCN (String cn) { this.encodedCN = cn; }

3>调用类里处理解码:
String cn = LdapUtil.decodeURLStr(encodedCN);

4>LdapUtil.java
public static String encodeURLStr(String src) 
{ 
return src != null && src.trim().length() > 0 ? src.replaceAll("&", "@") : ""; 
} 
public static String decodeURLStr(String src) 
{ 
return src != null && src.trim().length() > 0 ? src.replaceAll("@", "&") : ""; 
}

--------------------------------------以下是-----网络搜索资料分享---------------------------------------
在使用url进行参数传递时,经常会传递一些中文名(或含有特殊字符)的参数或URL地址,在后台处理时会发生转换错误。在有些传递页面使用GB2312,而在接收页面使用UTF8,这样接收到的参数就可能会与原来发生不一致。使用服务器端的 urlEncode函数编码的URL,与使用客户端javascript的encodeURI函数编码的URL,结果就不一样。javascript对文字进行编码涉及3 个函数: escape,encodeURI,encodeURIComponent,相应 3 个解码函数: unescape,decodeURI,decodeURIComponent

javaScript中的编码方法
escape () 方法:采用ISO Latin字符集对指定的字符串进行编码。 所有的空格符、标点符号、特殊字符以及其他非ASCII字符都将被转化成%xx格式的字符编码(xx等于该字符在字符集表里面的编码的16进制数字)。比如,空格符对应的编码是%20。unescape方法与此相反。不会被此方法编码的字符: @ * / +
encodeURI ()方法:把URI字符串采用UTF-8编码格式转化成escape格式的字符串。 不会被此方法编码的字符:! @ # $& * ( ) = : / ; ? + '
encodeURIComponent ()方法:把URI字符串采用UTF-8编码格式转化成escape格式的字符串。与encodeURI()相比,这个方法将对更多的字符进行编码,比如 / 等字符。 所以如果字符串里面包含了URI的几个部分的话,不能用这个方法来进行编码,否则 / 字符被编码之后URL将显示错误。不会被此方法编码的字符:! * ( )
因此,对于中文字符串来说,如果不希望把字符串编码格式转化成UTF-8格式的(比如原页面和目标页面的charset是一致的时候),只需要使用escape。如果你的页面是GB2312或者其他的编码,而接受参数的页面是 UTF-8编码的,就要采用encodeURI或者encodeURIComponent。

另外,encodeURI/encodeURIComponent是在javascript1.5之后引进的 ,escape则在javascript1.0版本就有。
1、 传递参数时需要使用 encodeURIComponent,这样组合的 url 才不会被 # 等特殊字符截断。例如:<script language="javascript">document.write('<a href="http://passport.baidu.com/?logout&aid=7&u='+encodeURIComponent ("http://cang.baidu.com/bruce42")+'">退出 </a>');</script>
2、 进行 url跳转时可以整体使用 encodeURI。 例如:Location.href=encodeURI ("http://cang.baidu.com/do/s?word=百度 &ct=21");
3、 js 使用数据时可以使用escape 。 例如:搜藏中history 纪录。
4、 escape对 0-255 以外的unicode 值进行编码时输出 %u**** 格式,其它情况下escape , encodeURI , encodeURIComponent编码结果相同。

最多使用的应为encodeURIComponent ,它是将中文、韩文等特殊字符转换成utf-8 格式的 url 编码,所以如果给后台传递参数需要使用encodeURIComponent 时需要后台解码对 utf-8 支持(form 中的编码方式和当前页面编码方式相同)

escape不编码字符有 69 个: *, + , - , . , / , @ , _ , 0-9 , a-z ,A-Z
encodeURI不编码字符有 82 个: !, # , $ , & , ' , ( , ) , * , + , , , - , . , / , : , ; , = , ? , @ , _ , ~ , 0-9, a-z , A-Z
encodeURIComponent不编码字符有 71 个: !, ' , ( , ) , * , - , . , _ , ~ , 0-9 , a-z ,A-Z

以下是url中可能用到的特殊字符及在url中的经过编码后的值:(略)
项目中发现,直接对url中的参数部分做encodeURI() 编码转换,后台servlet通过getParamater()获取时,不需要转换可以直接获取到正确的值。 说明:参数没有用到中文,框架用的是struts框架

Javascript 相关文章推荐
来自国外的30个基于jquery的Web下拉菜单
Jun 22 Javascript
ajax异步刷新实现更新数据库
Dec 03 Javascript
jQuery实现等比例缩放大图片让大图片自适应页面布局
Oct 16 Javascript
Javascript Memoizer浅析
Oct 16 Javascript
jQuery元素的隐藏与显示实例
Jan 20 Javascript
js+css实现的圆角边框TAB选项卡滑动门代码分享(2款)
Aug 26 Javascript
js实现手机拍照上传功能
Jan 17 Javascript
JQ中$(window).load和$(document).ready区别与执行顺序
Mar 01 Javascript
原生JS实现导航下拉菜单效果
Nov 25 Javascript
Vue中使用 setTimeout() setInterval()函数的问题
Sep 13 Javascript
JS实现使用POST方式发送请求
Aug 30 Javascript
2020淘宝618理想生活列车自动领喵币js脚本的代码
Jun 02 Javascript
JS获取浏览器版本及名称实现函数
Apr 02 #Javascript
js 火狐下取本地路径实现思路
Apr 02 #Javascript
input 输入框获得/失去焦点时隐藏/显示文字(jquery版)
Apr 02 #Javascript
JQuery给元素添加/删除节点比如select
Apr 02 #Javascript
Extjs4 消息框去掉关闭按钮(类似Ext.Msg.alert)
Apr 02 #Javascript
extjs关于treePanel+chekBox全部选中以及清空选中问题探讨
Apr 02 #Javascript
关于extjs treepanel复选框选中父节点与子节点的问题
Apr 02 #Javascript
You might like
php session处理的定制
2009/03/16 PHP
PHP 在线翻译函数代码
2009/05/07 PHP
PHP制作3D扇形统计图以及对图片进行缩放操作实例
2014/10/23 PHP
php编写批量生成不重复的卡号密码代码
2015/05/14 PHP
Laravel框架数据库迁移操作实例详解
2020/04/06 PHP
JavaScript高级程序设计 XML、Ajax 学习笔记
2011/09/10 Javascript
javascript 基础篇2 数据类型,语句,函数
2012/03/14 Javascript
nodejs中exports与module.exports的区别详细介绍
2013/01/14 NodeJs
JS脚本defer的作用示例介绍
2014/01/02 Javascript
在AngularJS中使用AJAX的方法
2015/06/17 Javascript
基于zepto的移动端轻量级日期插件--date_picker
2016/03/04 Javascript
基于jQuery实现收缩展开功能
2016/03/18 Javascript
jQuery插件zTree实现删除树子节点的方法示例
2017/03/08 Javascript
jQuery实现扑克正反面翻牌效果
2017/03/10 Javascript
Angular.js去除页面中显示的空行方法示例
2017/03/30 Javascript
详谈AngularJs 控制器、数据绑定、作用域
2017/07/09 Javascript
swiper 解决动态加载数据滑动失效的问题
2018/02/26 Javascript
关于Vue组件库开发详析
2018/07/01 Javascript
VUE的history模式下除了index外其他路由404报错解决办法
2019/08/21 Javascript
vue 使用插槽分发内容操作示例【单个插槽、具名插槽、作用域插槽】
2020/03/06 Javascript
微信h5静默和非静默授权获取用户openId的方法和步骤
2020/06/08 Javascript
python开发之字符串string操作方法实例详解
2015/11/12 Python
Python中with及contextlib的用法详解
2017/06/08 Python
Python3之文件读写操作的实例讲解
2018/01/23 Python
使用Python写一个小游戏
2018/04/02 Python
python实现事件驱动
2018/11/21 Python
python将unicode和str互相转化的实现
2020/05/11 Python
将pycharm配置为matlab或者spyder的用法说明
2020/06/08 Python
德国街头和运动文化高品质商店:BSTN Store
2017/08/26 全球购物
英国最大的婴儿监视器网上商店:Baby Monitors Direct
2018/04/24 全球购物
澳大利亚游乐场设备品牌:Lifespan Kids
2019/05/24 全球购物
简历的个人自我评价范文
2014/01/03 职场文书
爱护花草树木的标语
2014/06/11 职场文书
2014年终个人总结报告
2015/03/09 职场文书
公司捐书倡议书
2015/04/27 职场文书
直播实况, OMG破敌三路五十分钟大战神技局摩托车
2022/04/01 DOTA