JS中URL编码参数(UrlEncode)

JS中URL编码参数(UrlEncode)

网上有很多文字作品写涉及在JS中呈现类似UrlEncode功能时都是自定义参数来呈现,其实JS中本身就有那样的参数。
参数parameter由于用类似URL的形式传过去 , 所以别直接就那样赋值
以下是对变量值的URL编码总结 : 意见用encodeURIComponent() , GET 和POST方法都能够发送过去
Java编程script中存在几种对URL字符串停止编码的窍门:escape(),encodeURI(),以及encodeURIComponent()。这几种编码所起的功能各不相同。
escape() 窍门:
采用ISO Latin字符集对指定的字符串停止编码。所有的空格符、标点符号、特殊字符以及更多有联系非ASCII字符都将被转化成%xx各式的字符编码(xx等于该字符在字符集表里面的编码的16进制数字)。比如,空格符对应的编码是%20。
不会被此窍门编码的字符: @ * / +
encodeURI() 窍门:
把URI字符串采用UTF-8编码各式转化成escape各式的字符串。
不会被此窍门编码的字符:! @ # $& * ( ) = : / ; ? + '
encodeURIComponent() 窍门:
把URI字符串采用UTF-8编码各式转化成escape各式的字符串。与encodeURI()相比,那个窍门将对更多的字符停止编码,比如 / 等字符。所以假如字符串里面包含了URI的几个部份的话,别用那个窍门来停止编码,否则 / 字符被编码之后URL将呈现错误。
不会被此窍门编码的字符:! * ( ) '

因此,对于汉文字符串来说,假如不期望把字符串编码各式转化成UTF-8各式的(比如原页面和目的页面的charset是一致的时候),只需求应用 escape。假如你的页面是GB2312或者更多有联系的编码,而接受参数parameter的页面是UTF-8编码的,就要采用encodeURI或者encodeURIComponent。

 

 

 

用JavaScript实现UrlEncode和UrlDecode的脚本代码

 

< script type = " text/vbscript " >
Function  str2asc(strstr)
str2asc  =   hex ( asc (strstr))
End Function
Function  asc2str(ascasc)
asc2str  =   chr (ascasc)
End Function
</ script >

< script type = " text/javascript " >
/* 这里开始时UrlEncode和UrlDecode函数 */
function  UrlEncode(str){
var ret = "" ;
var strSpecial = " !\ " #$% & ' ()*+,/:;<=>?[]^`{|}~%";
var tt =   "" ;

for (var i = 0 ;i < str.length;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 < str.length;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 " ));
</ script >  

JavaScript 中实现 ANSI(gb2312) 的 URL 编码与解码(URLEncode、URLDecode)

 

 encodeURI 和 encodeURIComponent 是按 UTF-8 对 URL 编码的,下面的代码是按 ANSI 对 URL进行编码和解码的。使用了两个 vbscript 自定义函数,请参见 JavaScript 函数如何调用 VBScript 函数

以下整理自 Moocky.Mark's Blog。

<script type="text/vbscript">
<!--
function str2asc(strstr)
    str2asc   =   hex(asc(strstr))
end function
 
function   asc2str(ascasc)
    asc2str   =   chr(ascasc)
end function
'-->
</script>
 
 
<script type="text/javascript">
<!--
function urlEncode(str)
{
    var ret = "";
    var strSpecial = "!\"#$%&’()*+,/:;<=>?[]^`{|}~%";
    var tt = "";
    for(var i = 0; i < str.length; 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 < str.length; 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;
}
-->
</script>

VBScript、VB.NET 中的 URLEncode、URLDecode

 

 (本文的 URLEncode、URLDecode 是按 ANSI 编码的。千一网络编辑注)

 VBScript 中的 URLEncode、URLDecode

 

Public   Function  URLEncode(strURL)
Dim  I
Dim  tempStr
For  I  =   1   To   Len (strURL)
     If   Asc ( Mid (strURL, I,  1 ))  <   0   Then
       tempStr  =   " % "   &   Right ( CStr ( Hex ( Asc ( Mid (strURL, I,  1 )))),  2 )
       tempStr  =   " % "   &   Left ( CStr ( Hex ( Asc ( Mid (strURL, I,  1 )))),  Len ( CStr ( Hex ( Asc ( Mid (strURL, I,  1 )))))  -   2 )  &  tempStr
       URLEncode  =  URLEncode  &  tempStr
     ElseIf  ( Asc ( Mid (strURL, I,  1 ))  >=   65   And   Asc ( Mid (strURL, I,  1 ))  <=   90 )  Or  ( Asc ( Mid (strURL, I,  1 ))  >=   97   And   Asc ( Mid (strURL, I,  1 ))  <=   122 )  Then
       URLEncode  =  URLEncode  &   Mid (strURL, I,  1 )
     Else
       URLEncode  =  URLEncode  &   " % "   &   Hex ( Asc ( Mid (strURL, I,  1 )))
     End   If
Next
End Function
 
Public   Function  URLDecode(strURL)
Dim  I
 
If   InStr (strURL,  " % " )  =   0   Then  URLDecode  =  strURL:  Exit   Function
 
For  I  =   1   To   Len (strURL)
     If   Mid (strURL, I,  1 )  =   " % "   Then
        If   eval ( " &H "   &   Mid (strURL, I  +   1 ,  2 ))  >   127   Then
          URLDecode  =  URLDecode  &   Chr ( eval ( " &H "   &   Mid (strURL, I  +   1 ,  2 )  &   Mid (strURL, I  +   4 ,  2 )))
          I  =  I  +   5
        Else
          URLDecode  =  URLDecode  &   Chr ( eval ( " &H "   &   Mid (strURL, I  +   1 ,  2 )))
          I  =  I  +   2
        End   If
     Else
       URLDecode  =  URLDecode  &   Mid (strURL, I,  1 )
     End   If
Next
End Function  
复制代码
 
Private Sub Command1_Click()Sub Command1_Click()
Text2.Text = URLEncode(Text1.Text)
End Sub
 
 
Public Function URLEncode()Function URLEncode(ByRef strURL As String) As String
Dim I As Long
Dim tempStr As String
For I = 1 To Len(strURL)
    If Asc(Mid(strURL, I, 1)) < 0 Then
       tempStr = "%" & Right(CStr(Hex(Asc(Mid(strURL, I, 1)))), 2)
       tempStr = "%" & Left(CStr(Hex(Asc(Mid(strURL, I, 1)))), Len(CStr(Hex(Asc(Mid(strURL, I, 1))))) - 2) & tempStr
       URLEncode = URLEncode & tempStr
    ElseIf (Asc(Mid(strURL, I, 1)) >= 65 And Asc(Mid(strURL, I, 1)) <= 90) Or (Asc(Mid(strURL, I, 1)) >= 97 And Asc(Mid(strURL, I, 1)) <= 122) Then
       URLEncode = URLEncode & Mid(strURL, I, 1)
    Else
       URLEncode = URLEncode & "%" & Hex(Asc(Mid(strURL, I, 1)))
    End If
Next
End Function
 
Public Function URLDecode()Function URLDecode(ByRef strURL As String) As String
Dim I As Long
 
If InStr(strURL, "%") = 0 Then URLDecode = strURL: Exit Function
 
For I = 1 To Len(strURL)
    If Mid(strURL, I, 1) = "%" Then
       If Val("&H" & Mid(strURL, I + 1, 2)) > 127 Then
          URLDecode = URLDecode & Chr(Val("&H" & Mid(strURL, I + 1, 2) & Mid(strURL, I + 4, 2)))
          I = I + 5
       Else
          URLDecode = URLDecode & Chr(Val("&H" & Mid(strURL, I + 1, 2)))
          I = I + 2
       End If
    Else
       URLDecode = URLDecode & Mid(strURL, I, 1)
    End If
Next
End Function
 
Private Sub Command2_Click()Sub Command2_Click()
Text3.Text = URLDecode(Text2.Text)
End Sub
 
Private Sub Form_Load()Sub Form_Load()
Text1.Text = "http://www.microsoft.com/中国微软"
End Sub 
 
 

纯 JavaScript 版的 ANSI 的 URL 编码与解码

 

 

JavaScript 版本中可以通过 encodeURI, encodeURIComponent 实现 UTF-8 的 URL 编码与解码,但要实现 ANSI 的就得自己写代码了。

之前有一个 JavaScript 与 VBScript 混合的 ANSI 的 URL 编码与解码,遗憾的是某些浏览器无法支持 VBScript,所以才有了本文纯 JavaScript 版的。

 

 

 

Unicode 与 ANSI 的编码转换

 

ANSI 编码与字符之间的转换 

 

function  str2asc(str)
{
    var n  =  UnicodeToAnsi(str.charCodeAt( 0 ));
    var s  =  n.toString( 16 );
    return s.toUpperCase();
}

function  asc2str(code)
{
    var n  =  AnsiToUnicode(code);
    return  String .fromCharCode(n);
}
复制代码
 
URL 编码与解码
 
function  urlEncode(str)
{
    var ret  =   "" ;
    var strSpecial  =   " !\ " #$% & ’() *+ , / :; <=> ?[] ^ `{|}~% " ;
    var tt  =   "" ;
     for (var i  =   0 ; i  <  str.length; 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  <  str.length; 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;
}
复制代码
 

url 编码 js url传参中文乱码解决方案(教程)

 前后台用js传参过程中,如果是中文就容易出现乱码,所以最好是先编码。 1.配置文件web.config中 在节中加上整个网站(的)编码方式。 
<globalization fileEncoding="GB2312" requestEncoding="GB2312" responseEncoding="GB2312"/> 
这样参数就以gb2312(的)中文编码方式传输了。而一般默认是utf-8. 
2.在传参是先编码在传输,接受时先编码,在接收。 
string mm=Server.URLEncode(你们); 
Response.Redirect(index.aspx?mm=+mm); 
然后在接收页解码: 
string mm = Server.URLDecode(Requext.querystring(mm)); 
javascript中存在几种对URL字符串进行编码(的)方法:escape(),encodeURI(),以及encodeURIComponent()。这几种编码所起(的)作用各不相同。 
escape() 方法: 
采用ISO Latin字符集对指定(的)字符串进行编码。所有(的)空格符、标点符号、特殊字符以及其他们非ASCII字符都将被转化成%xx格式(的)字符编码(xx等于该字符在字符集表里面(的)编码(的)16进制数字)。比如,空格符对应(的)编码是%20。 
不会被此方法编码(的)字符: @ * / + 
encodeURI() 方法: 
把URI字符串采用UTF-8编码格式转化成escape格式(的)字符串。 
不会被此方法编码(的)字符:! @ # $& * ( ) = : / ; ? + ' 
encodeURIComponent() 方法: 
把 URI字符串采用UTF-8编码格式转化成escape格式(的)字符串。与encodeURI()相比,这个方法将对更多(的)字符进行编码,比如 / 等字符。所以如果字符串里面包含了URI(的)几个部分(的)话,不能用这个方法来进行编码,否则 / 字符被编码之后URL将显示错误。 
不会被此方法编码(的)字符:! * ( ) ' 
因 此,对于中文字符串来说,如果不希望把字符串编码格式转化成UTF-8格式(的)(比如原页面和目标页面(的)charset是一致(的)时候),只需要 使用 escape。如果你们(的)页面是GB2312或者其他们(的)编码,而接受参数(的)页面是UTF-8编码(的),就要采用encodeURI或者 encodeURIComponent。 
另外,encodeURI/encodeURIComponent是在javascript1.5之后引进(的),escape则在javascript1.0版本就有。 

传参:用encodeURI("url参数")将url编码 
收参:用decodeURI("接收到(的)值")解码

 

js实现url加密,解密、

查看效果:js实现url加密,解密

<!--代码来自网络-->

<title>js实现asp中的UrlEncode和UrlDecode--来自网络</title>

<form action="" method="post" name="form">

<input type="text" size="50" name="code" maxlength="100" /><br />

<input type="submit" value="加密解密" />

</form>



<script language="vbscript">

Function str2asc(strstr)

str2asc = hex(asc(strstr))

End Function

Function asc2str(ascasc)

asc2str = chr(ascasc)

End Function

</script>



<script language="javascript">

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

function UrlEncode(str){

var ret="";

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

for(var i=0;i<str.length;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<str.length;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;

}



ss=""

aa=UrlEncode(ss)

bb=UrlDecode(ss)

document.write("编码后"+aa+"<br>");

document.write("解码后:"+bb);

转载于:https://www.cnblogs.com/hechunhua/p/3627952.html

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值