现在的位置: 首页 > 综合 > 正文

url 传递参数(特殊字符)解决方法

2013年08月12日 ⁄ 综合 ⁄ 共 2326字 ⁄ 字号 评论关闭
 

有些符号在URL中是不能直接传递的,如果要在URL中传递这些特殊符号,那么就要使用他们的编码了。下表中列出了一些URL特殊符号及编码

 

      十六进制值
1. + URL 中+号表示空格 %2B
2. 空格 URL中的空格可以用+号或者编码 %20
3. / 分隔目录和子目录 %2F
4. ? 分隔实际的 URL 和参数 %3F
5. % 指定特殊字符 %25
6. # 表示书签 %23
7. & URL 中指定的参数间的分隔符 %26
8. = URL 中指定参数的值 %3D
解决的方法:
replace() 方法如果直接用str.replace("-","!") 只会替换第一个匹配的字符.
而str.replace(//-/g,"!")则可以替换掉全部匹配的字符(g为全局标志)。
replace()

js中替换字符变量如下:

 data2=data2.replace(//%/g,"%25");
 data2=data2.replace(//#/g,"%23");
 data2=data2.replace(//&/g,"%26");



其他一些资料。。。仅供参考。。。

在使用url进行参数传递时,经常会传递一些
中文名(或含有特殊字符)的参数或URL地址,在后台处理时会发生转换错误。在有些传递页面使用GB2312,而在接收页面使用UTF8,这样接收到的参
数就可能会与原来发生不一致。使用服务器端的urlEncode函数编码的URL,与使用客户端java的encodeURI函数编码的URL,结果就不
一样。

java对文字进行编码涉及
3
个函数:
escape,encodeURI,encodeURIComponent
,相应
3
个解码函数:
unescape,decodeURI,decodeURIComponent


此,对于中文字符串来说,如果不希望把字符串编码格式转化成UTF-8格式的(比如原页面和目标页面的charset是一致的时候),只需要使用
escape。如果你的页面是GB2312或者其他的编码,而接受参数的页面是UTF-8编码的,就要采用encodeURI或者
encodeURIComponent。

1、  


传递参数时需要使用
encodeURIComponent
,这样组合的
url
才不会被
#
等特殊字符截断。

   

例如:
<
language="java">write('<a
href="http://passport.baidu.com/?logout&aid=7&u='+encodeURIComponent("http://cang.baidu.com/bruce42")+'">

退出
</a>');</>

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

抱歉!评论已关闭.