首页 >php教程 >php手册 >js实现php函数urlencode

js实现php函数urlencode

WBOY
WBOY原创
2016-06-06 19:44:013571浏览

本文介绍了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编码将空格转换为 。

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

js实现php函数urlencode

js实现php函数urlencode代码

 1 函数 URLEncode (clearString) {
 2   var 输出 = '';
 3   var x = 0 ;
 4   clearString = clearString.toString();
 5   var 正则表达式 = / (^[a-zA-Z0-9-_.]*)/;
 6   while (x  clearString.length) {
 7     var 匹配 = regex.exec(clearString.substr(x) );
 8     如果 (匹配!= null && match.length > 1 && 匹配[1!= '') {
 9         输出 += 匹配[1];
10       x += 匹配[1].length;
11     } 其他 {
12       if (clearString.substr(x, 1 == ' ') {
13         //文在此用 clearString[x] == ' ' 做判断,但不支持把字符串当作阵列来访问,
14         //修改后两个浏览器都可兼容
15         输出 += '+';
16       }
17       其他 {
18         var charCode = clearString.charCodeAt(x);
19         var hexVal = charCode.toString( 16);
20         输出 += '%' + ( hexVal.length  2 ? '0' : '' ) + hexVal.toUpperCase();
21       }
22       x++;
23     }
24   }
25   返回 输出;
26 }

js实现php函数urlencode

 

 

注:上面的代码引自 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函数

js实现php函数urlencode

js实现php函数urlencode代码

 1 var 网址= {
 2  
 3     // url 编码的公共方法
 4     编码: 函数(字符串){
 5         返回 转义(这个._utf8_encode(string));
 6     },
 7  
 8     // 网址解码的公共方法
 9     解码: 函数(字符串){
10         返回 这个._utf8_decode(unescape(string));
11     },
12  
13     // UTF-8 编码的私有方法
14     _utf8_encode : 函数(字符串){
15         字符串 = string.replace(/rn/g,"n");
16         var utftext = "";
17  
18         对于 (var n = 0; n  string.length; n++) {
19  
20             var c = string.charCodeAt(n);
21  
22             如果 (c  128) {
23                 utftext += String.fromCharCode(c);
24             }
25             否则 if((c >  127&& (c  2048)) {
26                 utftext += String.fromCharCode((c >> 6| 192);
27                 utftext += String.fromCharCode((c &  63| 128);
28             }
29             其他 {
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         返回 utftext;
38     },
39  
40     // UTF-8 解码的私有方法
41     _utf8_decode : 函数(utftext){
42         var 字符串 = "";
43         var i = 0 ;
44         var c = c1 = c2 = 0;
45  
46         while (i  utftext.length ) {
47  
48             c = utftext.charCodeAt(i);
49  
50             如果 (c  128) {
51                 字符串 += String.fromCharCode(c);
52                 我++;
53             }
54             否则 if((c >  191&& (c  224)) {
55                 c2 = utftext.charCodeAt(i+1);
56                 string += String.fromCharCode(((c & 31 6| (c2 & 63));
57                 i += 2;
58             }
59             其他 {
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         返回 字符串;
69     }
70  
71 }

js实现php函数urlencode

 

 
声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn