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

我遇到的问题是: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框架

(0)

相关推荐

  • php获取URL中带#号等特殊符号参数的解决方法

    例如下面的PHP代码: 复制代码 代码如下: <?php echo $_GET['key']; ?> 当url为http://test.com/c.php?key=999时,正常输出:999 当url为http://test.com/c.php?key=9#888时,只能输出:9 而我想要获得的是9#888,那要怎么办呢?只能在把9#888传递给key的这个环节想办法. 我是用JS中的escape函数编码后传递解决了这个问题,需要的朋友可以参考一下. 复制代码 代码如下: <input

  • 关于URL中的特殊符号使用介绍

    url即统一资源定位符,是通用资源标志符URI的一种. 由于有效的URI中不能包含某些字符,如空格等,如果不利用相应编码函数对URI进行编码(浏览器会对相应的URL进行处理),那么无法访问到有效的资源. javascript的Global对象(javascript的内置对象)中有四个URI方法,分别是encodeURI和decodeURI,encodeURIComponent和decodeURIComponent,浏览器模型(BOM)提供了escape和unescape.在实际应用中,URI方法

  • url参数中有+、空格、=、%、&、#等特殊符号的问题解决

    url出现了有+,空格,/,?,%,#,&,=等特殊符号的时候,可能在服务器端无法获得正确的参数值,如何是好?解决办法将这些字符转化成服务器可以识别的字符,对应关系如下:URL字符转义 用其它字符替代吧,或用全角的. +    URL 中+号表示空格                                 %2B   空格 URL中的空格可以用+号或者编码           %20 /   分隔目录和子目录                                     %2F

  • url中的特殊符号有什么含义(推荐)

    一.# #代表网页中的一个位置.其右面的字符,就是该位置的标识符.比如,http://www.example.com/index.html#print就代表网页index.html的print位置.浏览器读取这个URL后,会自动将print位置滚动至可视区域. 为网页位置指定标识符,有两个方法.一是使用锚点,比如<a name="print"></a>,二是使用id属性,比如<div id="print">. 二.HTTP请求不包

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

    我遇到的问题是:url里的参数内容包含&符合,我有两种方法解决 其一方法是:在页面用JS转码,例子如下(前端处理) 复制代码 代码如下: <a href="#" onclick="test('${group.type}','${group.cn }')">${group.cn })</a> <script language="javascript"> function test(a,b){ alert(

  • 使用JavaScript获取URL中的参数(两种方法)

    本文给大家分享两种方法使用js获取url中的参数,其中方法二是使用的正则表达式方法,大家可以根据需要选择比较好的方法,废话不多说了,直接看详细介绍吧. 方法一: //取url参数 var type = request("type") function request() { var query = location.search; var paras = arguments[0]; if (arguments.length == 2) { query = arguments[1]; }

  • vue 获取url里参数的两种方法小结

    我就废话不多说了,大家还是直接看代码吧~ 第一种: const query = Qs.parse(location.search.substring(1)) let passport = query.passport; 第二种: var query=this.$route.query; let lat = query.lat; 补充知识:Vue通过query获取路由参数 现在来讲Vue通过query获取路由参数 可以看见com1组件里的路由参数为 name=zhangsan&job=teache

  • PHP判断远程url是否有效的几种方法小结

    解决办法: 使用PHP解决 使用file_get_contents函数,不过优缺点如果url无法访问,会出现终止程序问题 使用curl返回,然后判断是否正确执行 使用get_headers函数,根据HTTP返回值查看是否有200 使用js解决: 使用原生的js函数ActiveXObject,仅支持ie内核的浏览器 使用jq扩展 本文主要介绍PHP解决办法中的第三种,这个方法很少用到,但是感觉又起来还不错, get_headers需要支持 php_openssl支持 查看phpinfo看看是否开启

  • ASP.NET中利用Segments取得URL的文件名的一种方法分享

    例如:http://www.abc.com/book/list.aspx,则对应取到list.aspx.一般我们可以这样写: 复制代码 代码如下: string url = Request.Url.ToString(); string r = url.Substring(url.LastIndexOf('/') + 1); Response.Write(r); 上述方法 一般情况下是可以的,但如果URL地址带参数则会有问题.比如加上?id=3&name=Tim,则最后取得的是list.aspx?

  • 最简单的JavaScript图片轮播代码(两种方法)

    通过改变每个图片的opacity属性: 素材图片: 代码一: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-"> <title>最简单的轮播广告</title> <style> body, div, ul, li { margin: ; padding: ; } ul { list-style-type: non

  • asp.net下检测远程URL是否存在的三种方法

    复制代码 代码如下: private void Page_Load(object sender, System.EventArgs e) { string url1 = "http://s.jb51.net/"; string url2 = "http://www.jb51.net/images/logo.gif"; Response.Write("<li>方法1:"); Response.Write(url1 + " 存在

  • js判断url是否有效的两种方法

    方法一:(仅适用于ie) 复制代码 代码如下: function CheckStatus(url)        {            XMLHTTP = new ActiveXObject("Microsoft.XMLHTTP")            XMLHTTP.open("HEAD",url,false)            XMLHTTP.send()            return XMLHTTP.status==200        } f

  • C++ 中回调函数详解及简单实例

    C++ 中回调函数详解及简单实例 回调函数调用关系图 对于第一种情况,主程序可以从执行到回调函数,也可以不执行回调函数,关键看宿主函数是否调用了回调函数. 对于第二种情况,主程序可以从执行到回调函数,也可以不执行回调函数,关键看宿主函数是否调用了回调函数.主程序不知道宿主函数什么时候调用回调函数,因为调用函数启动了线程,这样,主程序就不必关心宿主函数什么时候调用回调函数了,主程序可以释放出来做自己的事了. 代码示例 #include <stdio.h> typedef void(*lpFunc

  • php 伪造HTTP_REFERER页面URL来源的三种方法

    php获取当前页面的前一个页面URL地址,即当前页面是从哪个页面链接过来的,可以使用$_SERVER['HTTP_REFERER'],但是这个来源页面的URL地址是可以被伪造和欺骗的,本文章向大家介绍伪造HTTP_REFERER页面URL的三种方法,需要的朋友可以参考一下. $_SERVER['HTTP_REFERER']是php用来判断页面上级来源页面的一个超级变局变量了,我们可以使用$_SERVER['HTTP_REFERER']来判断是从哪个页面进入到此页面了,这样我们可以进行更好的跟踪了

随机推荐