简单实例处理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[js]获取url参数的代码
Oct 17 Javascript
IE8 兼容性问题(属性名区分大小写)
Jun 04 Javascript
jQuery 数据缓存data(name, value)详解及实现
Jan 04 Javascript
12个非常有创意的JavaScript小游戏
Mar 18 Javascript
jquery实现弹出层完美居中效果
Mar 03 Javascript
分分钟玩转Vue.js组件(二)
Mar 01 Javascript
利用Ionic2 + angular4实现一个地区选择组件
Jul 27 Javascript
JavaScript实现封闭区域布尔运算的示例代码
Jun 25 Javascript
jQuery选择器之基本过滤选择器用法实例分析
Feb 19 jQuery
layer弹出层显示在top顶层的方法
Sep 11 Javascript
jQuery实现点击滚动到指定元素上的方法分析
Mar 19 jQuery
vue项目支付功能代码详解
Feb 18 Vue.js
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
解析csv数据导入mysql的方法
2013/07/01 PHP
Php header()函数语法及使用代码
2013/11/04 PHP
php实现购物车功能(上)
2020/07/23 PHP
php封装json通信接口详解及实例
2017/03/07 PHP
js中的数组Array定义与sort方法使用示例
2013/08/29 Javascript
解析URI与URL之间的区别与联系
2013/11/22 Javascript
JS中getYear()和getFullYear()区别分析
2014/07/04 Javascript
在jQuery中处理XML数据的大致方法
2015/08/14 Javascript
jQuery zclip插件实现跨浏览器复制功能
2015/11/02 Javascript
详解Angular.js数据绑定时自动转义html标签及内容
2017/03/30 Javascript
CSS3+JavaScript实现翻页幻灯片效果
2017/06/28 Javascript
iscroll动态加载数据完美解决方法
2017/07/18 Javascript
探索webpack模块及webpack3新特性
2017/09/18 Javascript
js数据类型检测总结
2018/08/05 Javascript
javascript设计模式 ? 解释器模式原理与用法实例分析
2020/04/17 Javascript
Vue如何基于vue-i18n实现多国语言兼容
2020/07/17 Javascript
springboot+vue+对接支付宝接口+二维码扫描支付功能(沙箱环境)
2020/10/15 Javascript
[01:41]DOTA2超级联赛专访YYF 称一辈子难忘TI2
2013/05/28 DOTA
python getopt 参数处理小示例
2009/06/09 Python
Python实现将数据库一键导出为Excel表格的实例
2016/12/30 Python
python复制文件到指定目录的实例
2018/04/27 Python
Python实现图片批量加入水印代码实例
2019/11/30 Python
python实现局域网内实时通信代码
2019/12/22 Python
pytorch梯度剪裁方式
2020/02/04 Python
Python实现动态给类和对象添加属性和方法操作示例
2020/02/29 Python
浅谈Python线程的同步互斥与死锁
2020/03/22 Python
Python Django中的STATIC_URL 设置和使用方式
2020/03/27 Python
eBay荷兰购物网站:eBay.nl
2020/06/26 全球购物
生产车间主任的个人自我鉴定
2013/10/25 职场文书
学生会竞选演讲稿
2014/04/24 职场文书
小学运动会班级口号
2014/06/09 职场文书
会计求职自荐信
2014/06/20 职场文书
员工辞退通知书
2015/04/17 职场文书
民间借贷借条范本
2015/05/25 职场文书
九年级化学教学反思
2016/02/22 职场文书
python 详解turtle画爱心代码
2022/02/15 Python