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

js实现php函数urlencode

WBOY
WBOYOriginal
2016-06-06 19:44:013571Durchsuche

本文介绍了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相同。

js实现php函数urlencode

js实现php函数urlencode代码

 1 function URLEncode (clearString) {
 2   var output = '';
 3   var x = 0;
 4   clearString = clearString.toString();
 5   var regex = /(^[a-zA-Z0-9-_.]*)/;
 6   while (x  clearString.length) {
 7     var match = regex.exec(clearString.substr(x));
 8     if (match != null && match.length > 1 && 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         var charCode = clearString.charCodeAt(x);
19         var hexVal = charCode.toString(16);
20         output += '%' + ( hexVal.length  2 ? '0' : '' ) + hexVal.toUpperCase();
21       }
22       x++;
23     }
24   }
25   return output;
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 Url = {
 2  
 3     // public method for url encoding
 4     encode : function (string) {
 5         return escape(this._utf8_encode(string));
 6     },
 7  
 8     // public method for url decoding
 9     decode : function (string) {
10         return this._utf8_decode(unescape(string));
11     },
12  
13     // private method for UTF-8 encoding
14     _utf8_encode : function (string) {
15         string = string.replace(/\r\n/g,"\n");
16         var utftext = "";
17  
18         for (var n = 0; n  string.length; n++) {
19  
20             var c = string.charCodeAt(n);
21  
22             if (c  128) {
23                 utftext += String.fromCharCode(c);
24             }
25             else if((c > 127&& (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         return utftext;
38     },
39  
40     // private method for UTF-8 decoding
41     _utf8_decode : function (utftext) {
42         var string = "";
43         var i = 0;
44         var c = c1 = c2 = 0;
45  
46         while ( i  utftext.length ) {
47  
48             c = utftext.charCodeAt(i);
49  
50             if (c  128) {
51                 string += String.fromCharCode(c);
52                 i++;
53             }
54             else 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             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         return string;
69     }
70  
71 }

js实现php函数urlencode

 

 
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn