简单实例处理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 相关文章推荐
JavaScript 数组的 uniq 方法
Jan 23 Javascript
javascript 常用功能总结
Mar 18 Javascript
js 利用image对象实现图片的预加载提高访问速度
Mar 29 Javascript
JavaScript自动设置IFrame高度的小例子
Jun 08 Javascript
javascript 操作符(~、&amp;、|、^、)使用案例
Dec 31 Javascript
如何使用PHP+jQuery+MySQL实现异步加载ECharts地图数据(附源码下载)
Feb 23 Javascript
基于Vue的SPA动态修改页面title的方法(推荐)
Jan 02 Javascript
javascript、php关键字搜索函数的使用方法
May 29 Javascript
angular4中*ngFor不能对返回来的对象进行循环的解决方法
Sep 12 Javascript
微信小程序入口场景的问题集合与相关解决方法
Jun 26 Javascript
JS+css3实现幻灯片轮播图
Aug 14 Javascript
React Ant Design树形表格的复杂增删改操作
Nov 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
PHP4实际应用经验篇(4)
2006/10/09 PHP
PHP获取当前日期所在星期(月份)的开始日期与结束日期(实现代码)
2013/06/18 PHP
关于PHP语言构造器介绍
2013/07/08 PHP
php实现购物车功能(下)
2016/01/05 PHP
PHP PDO和消息队列的个人理解与应用实例分析
2019/11/25 PHP
js实现简单模态窗口,背景灰显
2008/11/14 Javascript
一段批量给页面上的控件赋值js
2010/06/19 Javascript
javascript 节点排序 2
2011/01/31 Javascript
javascrip关于继承的小例子
2013/05/10 Javascript
一张表格告诉你windows.onload()与$(document).ready()的区别
2014/05/16 Javascript
jquery中toggle函数交替使用问题
2015/06/22 Javascript
Bootstrap每天必学之导航
2015/11/26 Javascript
js控住DOM实现发布微博效果
2016/08/30 Javascript
AJAX和jQuery动态加载数据的实现方法
2016/12/05 Javascript
解决ajax不能访问本地文件问题(利用js跨域原理)
2017/01/24 Javascript
ejsExcel模板在Vue.js项目中的实际运用
2018/01/27 Javascript
解决angularjs WdatePicker ng-model的问题
2018/09/13 Javascript
小程序实现多选框功能
2018/10/30 Javascript
浅谈如何优雅处理JavaScript异步错误
2019/11/12 Javascript
React中获取数据的3种方法及优缺点
2020/02/18 Javascript
uni-app使用微信小程序云函数的步骤示例
2020/05/22 Javascript
vue实现简单跑马灯效果
2020/05/25 Javascript
解决Echarts2竖直datazoom滑动后显示数据不全的问题
2020/07/20 Javascript
JS代码简洁方式之函数方法详解
2020/07/28 Javascript
浅析 Vue 3.0 的组装式 API(一)
2020/08/31 Javascript
详谈tensorflow gfile文件的用法
2020/02/05 Python
150行python代码实现贪吃蛇游戏
2020/04/24 Python
Python安装并操作redis实现流程详解
2020/10/13 Python
英国No.1文具和办公用品在线:Euroffice
2016/09/21 全球购物
美国折扣地毯销售网站:Rugs.com
2020/03/27 全球购物
城市轨道专业个人求职信范文
2013/09/23 职场文书
公司门卫管理制度
2014/02/01 职场文书
学生会个人自荐书范文
2014/02/12 职场文书
过程装备与控制工程专业求职信
2014/07/02 职场文书
高中生国庆节演讲稿范文2014
2014/09/21 职场文书
涨工资申请书应该怎么写?
2019/07/08 职场文书