zoukankan      html  css  js  c++  java
  • escape,encodeURI,encodeURIComponent

    网页传送数据乱码的原因:

    1、浏览器,表单发的URL是和页面编码是否一致
    2、浏览器中用XMLHTTP发送的URL是和浏览器默认设置是否一致
    3、请求URL与服务器是否一致

    js有三个编码函数:

    escape,encodeURI,encodeURIComponent

    1、   传递参数时需要使用encodeURIComponent,这样组合的url才不会被#等特殊字符截断。  
    例如:

    var url = encodeURIComponent("http://localhost/login.aspx?error=请输入密码");
    //http%3A%2F%2Flocalhost%2Flogin.aspx%3Ferror%3D%E8%AF%B7%E8%BE%93%E5%85%A5%E5%AF%86%E7%A0%81 
    

    2、   进行url跳转时可以整体使用encodeURI
    例如:Location.href = encodeURI(http://localhost/member.aspx?name=无名");

    3、   js使用数据时可以使用escape
    例如:搜藏中history纪录。

    4、   escape对0-255以外的unicode值进行编码时输出%u****格式,其它情况下escape,encodeURI,encodeURIComponent编码结果相同。

    最多使用的应为encodeURIComponent,它是将中文、韩文等特殊字符转换成utf-8格式的url编码,所以如果给后台传递参数需要使用encodeURIComponent时需要后台解码对utf-8支持(form中的编码方式和当前页面编码方式相同)
    escape不编码字符有69个:*,+,-,.,/,@,_,0-9,a-z,A-Z
    encodeURI不编码字符有82个:!,#,$,&,',(,),*,+,,,-,.,/,:,;,=,?,@,_,~,0-9,a-z,A-Z
    encodeURIComponent不编码字符有71个:!, ',(,),*,-,.,_,~,0-9,a-z,A-Z

    urlEncode
    在做项目的时候需要对(Internet) Search Engine导入链接进行Keyword analysis.

    Google  用的是js'encodeURI()函数,可直接用decodeURI()解码。
    Baidu 则用的是:
    System.Web.HttpUtility.UrlEncode("编码", System.Text.Encoding.GetEncoding("gb2312"))的编码,
    解码则需要用到:
    System.Web.HttpUtility.UrlDecode("%B1%E0%C2%EB", System.Text.Encoding.GetEncoding("GB2312")));
    这个需要用的ASP.NET C#.以下提供一个Javascript操作进行解码的方法.

    UrlEncode:

    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; 
    } 
    


    UrlDecode:

    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; 
    } 
    
  • 相关阅读:
    OleDbCommandBuilder 使用方法
    jquery table 的添加和删除
    OleCommand的SqlText占位符的问题
    一个用于整体移动文件夹的方法,简练实用
    .NET设计模式系列文章
    OleDbCommandBuilder
    MYSVW三周年
    Direct3D 开发之旅 3D 游戏基本概念的介绍1
    win8 开发之旅(10) 五子棋游戏开发 错误提醒和纠错
    C++ 学习之旅二——说一说C++头文件
  • 原文地址:https://www.cnblogs.com/davinci/p/1660247.html
Copyright © 2011-2022 走看看