• 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)) <= 90Or (Asc(Mid(strURL, I, 1)) >= 97 And Asc(Mid(strURL, I, 1)) <= 122Then
           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 + 12)) > 127 Then
              URLDecode 
    = URLDecode & Chr(eval("&H" & Mid(strURL, I + 12& Mid(strURL, I + 42)))
              I 
    = I + 5
           
    Else
              URLDecode 
    = URLDecode & Chr(eval("&H" & Mid(strURL, I + 12)))
              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 StringAs 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)) <= 90Or (Asc(Mid(strURL, I, 1)) >= 97 And Asc(Mid(strURL, I, 1)) <= 122Then
           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 StringAs 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 + 12)) > 127 Then
              URLDecode 
    = URLDecode & Chr(Val("&H" & Mid(strURL, I + 12& Mid(strURL, I + 42)))
              I 
    = I + 5
           
    Else
              URLDecode 
    = URLDecode & Chr(Val("&H" & Mid(strURL, I + 12)))
              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);

  • 相关阅读:
    虚方法的调用是怎么实现的(单继承VS多继承)
    C++ Data Member内存布局
    删除单链表,你会吗?
    最近面试遇到的Windows相关的题目
    C# 文章导航
    移动端开发文章导航
    Vue源码阅读(一) 准备工作
    vue-router源码阅读(一) 内部探究
    Vuex源码阅读(二) store内的getters实现逻辑
    Vuex源码阅读(一) new Vuex.Store()内部探究
  • 原文地址:https://www.cnblogs.com/hechunhua/p/3627952.html
Copyright © 2020-2023  润新知