js urlencode 20 php,js实现php函数urlencode

本文介绍了php函数urlencode的js实现方法并比较js和php各编码函数的区别。 通常form表单的enctype类型为 application/x-www-form-urlencoded, 当表单提交后,提交的数据自动被编码, 规则为 除了 -_. 之外的所有非字母数字字符都将被替换成百分号(%)后跟两

本文介绍了php函数urlencode的js实现方法并比较js和php各编码函数的区别。

通常form表单的enctype类型为 application/x-www-form-urlencoded, 当表单提交后,提交的数据自动被编码, 规则为" 除了 -_. 之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数,空格则编码为加号(+)。", php的urlencode函数与其功能相同。

js编码方法:escape, encodeURI, encodeURIComponent。

escape可以对大多数符号进行编码,但是对unicode字符无效。

php编码方法:urlencode, rawurlencode, htmlentities。

urlencode和rawurlencode唯一的区别是对空格的编码方式不同,rawurlencode遵循RFC 1738编码将空格转换为 %20。

如何用js实现php的urlencode功能, 网上流传着一段js和vbscript混写的代码,通用性不好,另找到国外一高人写的, 经测试与urlencode相同。

test.jsp?url=http%3A%2F%2Fcommon.cnblogs.com%2Fimages%2Fcopycode.gif&refer=http%3A%2F%2Fblog.csdn.net%2Fdodott%2Farticle%2Fdetails%2F24489701

test.jsp?url=http%3A%2F%2Fimages.cnblogs.com%2FOutliningIndicators%2FExpandedBlockStart.gif&refer=http%3A%2F%2Fblog.csdn.net%2Fdodott%2Farticle%2Fdetails%2F24489701代码

1 functionURLEncode (clearString) {2 varoutput='';3 varx=0;4 clearString=clearString.toString();5 varregex=/(^[a-zA-Z0-9-_.]*)/;6 while(x1&&match[1]!='') {9 output+=match[1];10 x+=match[1].length;11 }else{12 if(clearString.substr(x,1)=='') {13 //原文在此用 clearString[x] == ' ' 做判断, 但ie不支持把字符串当作数组来访问,14 //修改后两种浏览器都可兼容15 output+='+';16 }17 else{18 varcharCode=clearString.charCodeAt(x);19 varhexVal=charCode.toString(16);20 output+='%'+( hexVal.length<2?'0':'')+hexVal.toUpperCase();21 }22 x++;23 }24 }25 returnoutput;26 }

test.jsp?url=http%3A%2F%2Fcommon.cnblogs.com%2Fimages%2Fcopycode.gif&refer=http%3A%2F%2Fblog.csdn.net%2Fdodott%2Farticle%2Fdetails%2F24489701

注:上面的代码引自 http://cass-hacks.com/articles/code/js_url_encode_decode/

下面附上js和php几种编码方法对特殊符号的编码对照表:

Input

JavaScript

PHP

escape

encodeURI

encodeURIComponent

urlencode

rawurlencode

htmlentities

%20

%20

%20

+

%20

!

%21

!

!

%21

%21

!

@

@

@

%40

%40

%40

@

#

%23

#

%23

%23

%23

#

$

%24

$

%24

%24

%24

$

%

%25

%25

%25

%25

%25

%

^

%5E

%5E

%5E

%5E

%5E

^

&

%26

&

%26

%26

%26

&

*

*

*

*

%2A

%2A

*

(

%28

(

(

%28

%28

(

)

%29

)

)

%29

%29

)

-

-

-

-

-

-

-

_

_

_

_

_

_

_

=

%3D

=

%3D

%3D

%3D

=

+

+

+

%2B

%2B

%2B

+

:

%3A

:

%3A

%3A

%3A

:

;

%3B

;

%3B

%3B

%3B;

;

.

.

.

.

.

.

.

"

%22

%22

%22

%22

%22

"

'

%27

'

'

%27

%27

'

\

%5C

%5C

%5C

%5C

%5C

\

/

/

/

%2F

%2F

%2F

/

?

%3F

?

%3F

%3F

%3F

?

<

%3C

%3C

%3C

%3C

%3C

<

>

%3E

%3E

%3E

%3E

%3E

>

~

%7E

~

~

%7E

%7E

~

[

%5B

%5B

%5B

%5B

%5B

[

]

%5D

%5D

%5D

%5D

%5D

]

{

%7B

%7B

%7B

%7B

%7B

{

}

%7D

%7D

%7D

%7D

%7D

}

`

%60

%60

%60

%60

%60

`

上表引自 http://www.the-art-of-web.com/javascript/escape/

另一个非常优秀的urlencode和urldecode函数

test.jsp?url=http%3A%2F%2Fcommon.cnblogs.com%2Fimages%2Fcopycode.gif&refer=http%3A%2F%2Fblog.csdn.net%2Fdodott%2Farticle%2Fdetails%2F24489701

test.jsp?url=http%3A%2F%2Fimages.cnblogs.com%2FOutliningIndicators%2FExpandedBlockStart.gif&refer=http%3A%2F%2Fblog.csdn.net%2Fdodott%2Farticle%2Fdetails%2F24489701代码

1 varUrl={2 3 //public method for url encoding4 encode :function(string) {5 returnescape(this._utf8_encode(string));6 },7 8 //public method for url decoding9 decode :function(string) {10 returnthis._utf8_decode(unescape(string));11 },12 13 //private method for UTF-8 encoding14 _utf8_encode :function(string) {15 string=string.replace(/\r\n/g,"\n");16 varutftext="";17 18 for(varn=0; n127)&&(c<2048)) {26 utftext+=String.fromCharCode((c>>6)|192);27 utftext+=String.fromCharCode((c&63)|128);28 }29 else{30 utftext+=String.fromCharCode((c>>12)|224);31 utftext+=String.fromCharCode(((c>>6)&63)|128);32 utftext+=String.fromCharCode((c&63)|128);33 }34 35 }36 37 returnutftext;38 },39 40 //private method for UTF-8 decoding41 _utf8_decode :function(utftext) {42 varstring="";43 vari=0;44 varc=c1=c2=0;45 46 while( i191)&&(c<224)) {55 c2=utftext.charCodeAt(i+1);56 string+=String.fromCharCode(((c&31)<<6)|(c2&63));57 i+=2;58 }59 else{60 c2=utftext.charCodeAt(i+1);61 c3=utftext.charCodeAt(i+2);62 string+=String.fromCharCode(((c&15)<<12)|((c2&63)<<6)|(c3&63));63 i+=3;64 }65 66 }67 68 returnstring;69 }70 71 }

test.jsp?url=http%3A%2F%2Fcommon.cnblogs.com%2Fimages%2Fcopycode.gif&refer=http%3A%2F%2Fblog.csdn.net%2Fdodott%2Farticle%2Fdetails%2F24489701

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值