java linux urlencode_Javascript下的urlencode编码解码方法decodeURIComponent()

关于在ASP(Server.UrlEncode)、PHP(urlencode())函数编码结果,或是经过asp、php等动态语言直接写入COOKIES的中文字符,用JS读取的时候,都会碰到一个编码的问题,那就是最终字符串被urlencode编码了,而又时有需要从JS在客户端去读取这些数据。而本文,就大概说说如何在js中通过系统自带的函数去解决这个问题。

而相信碰到过此问题的朋友应该都有所了解,目前网络上流行一些js下的自定义函数去解决这个问题,如说vbscript(URLDecode())、javascript(UrlDecode())等。而这两个函数,都无法很好的与asp(Server.UrlEncode)、php(urlencode())这两个函数相互通讯。

关于vbscript(function URLDecode())、javascript(function UrlDecode())在本文最后也会转载出来。

而本文的主角就是javascript(UrlDecodedecodeURIComponent()),这个函数名称实在太常了,个人真的不太了解,毕竟js的系统函数很多,很容易遗漏。烦恼在偶然间发现了这个函数!

编码函数:encodeURIComponent()

解码函数:decodeURIComponent()

decodeURIComponent()语法

decodeURIComponent(URIstring)

参 数:(URIstring)必需。一个字符串,含有编码 URI 组件或其他要解码的文本。

返回值:URIstring 的副本,其中的十六进制转义序列将被它们表示的字符替换。

实例:

1

2

3

4

5

6

var test1="烦恼";

var test2="%E7%83%A6%E6%81%BC";

document.write("编码(原="+test1+"):"+encodeURIComponent(test1)+"
");

document.write("解码(原="+test2+"):"+decodeURIComponent(test2));

结果:

编码(原=烦恼):%E7%83%A6%E6%81%BC

解码(原=%E7%83%A6%E6%81%BC):烦恼

注意:本文只在UTF-8编码环境下测试。因为在不同编码环境下,asp(Server.UrlEncode)所编译后的代码好像不同,有待测试!

================================

附转载:

vbscript(function URLDecode())

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

javascript(function UrlDecode())其实还是柔和使用了vbscript,好像在javascript环境中,对于asc、hex、chr相关的转换,如 str.charCodeAt(0).toString(16) 及 String.fromCharCode(str) 在不同编码下,对于中文的编码结果还不统一。

比如: vbscript str2asc/asc2str

1

2

3

4

5

6

7

8

9

10

Function str2asc(strstr)

str2asc = hex(asc(strstr))

End Function

Function asc2str(ascasc)

asc2str = chr(ascasc)

End Function

MsgBox str2asc("a")

MsgBox asc2str("&H61")'16进制转的61 转到 10进制就是 97

javascript str2asc/asc2str

1

2

3

4

5

6

7

8

9

10

function str2asc(str){

return str.charCodeAt(0).toString(16);

}

function asc2str(str){

return String.fromCharCode(str);

}

alert(str2asc("a"));//

alert(asc2str("0x61"));//

演示:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

Function str2asc(strstr)

str2asc = hex(asc(strstr))

End Function

Function asc2str(ascasc)

asc2str = chr(ascasc)

End Function

/*这里开始时UrlEncode和UrlDecode函数*/

function UrlEncode(str){

var ret="";

var strSpecial="!\"#$%&'()*+,/:;<=>?[]^`{|}~%";

var tt="";

for(var i=0;i

var chr = str.charAt(i);

var c=str2asc(chr);

tt += chr+":"+c+"n";

if(parseInt("0x"+c) > 0x7f){

ret+="%"+c.slice(0,2)+"%"+c.slice(-2);

}else{

if(chr==" ")

ret+="+";

else if(strSpecial.indexOf(chr)!=-1)

ret+="%"+c.toString(16);

else

ret+=chr;

}

}

return ret;

}

function UrlDecode(str){

var ret="";

for(var i=0;i

var chr = str.charAt(i);

if(chr =="+"){

ret+=" ";

}else if(chr=="%"){

var asc = str.substring(i+1,i+3);

if(parseInt("0x"+asc)>0x7f){

ret+=asc2str(parseInt("0x"+asc+str.substring(i+4,i+6)));

i+=5;

}else{

ret+=asc2str(parseInt("0x"+asc));

i+=2;

}

}else{

ret+= chr;

}

}

return ret;

}

alert(UrlDecode("%C2%D2%C2%EB"));

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值