zoukankan      html  css  js  c++  java
  • jquery.get中文参数问题——js符串编码

    摘要:

    使用jquery.get进行ajax请求获取数据是很常见的操作,一般请求参数都为字母,今天发现在参数中使用中文会出现浏览器兼容性问题,现在记录如下。

    基本使用语法:

    $(selector).get(url,data,success(response,status,xhr),dataType)
    参数描述
    url 必需。规定将请求发送的哪个 URL。
    data 可选。规定连同请求发送到服务器的数据。
    success(response,status,xhr)

    可选。规定当请求成功时运行的函数。

    额外的参数:

    • response - 包含来自请求的结果数据
    • status - 包含请求的状态
    • xhr - 包含 XMLHttpRequest 对象
    dataType

    可选。规定预计的服务器响应的数据类型。

    默认地,jQuery 将智能判断。

    可能的类型:

    • "xml"
    • "html"
    • "text"
    • "script"
    • "json"
    • "jsonp"

    问题:

    var url = "get.php?cate=cla&require=ajax&q=all&college=材料学院"; 
    $.get(url,function(result){        
        $(".dlC").html("").html(result.lastChild.firstChild.nodeValue);
    },"xml");

    问题描述:

      在firefox和chrome中功能正常,在sogou兼容模式(ie7内核)中就不能读取出数据。

    问题排除:

      1、尝试直接打印出college参数用alert输出看看结果,firefox中能直接输出“材料学院”,在sogou兼容模式中就输出空白;

      2、使用firebug查看get参数,url地址为get.php?cate=cla&require=ajax&q=all&college=%E6%9D%90%E6%96%99%E5%AD%A6%E9%99%A2,使用该地址直接在sogou兼容模式中地址栏中直接请求,能返回数据;

      3、初步结论是sogou兼容模式对中文参数未处理,导致后台不能获取参数;

      4、再次尝试,直接将url改为url=get.php?cate=cla&require=ajax&q=all&college=%E6%9D%90%E6%96%99%E5%AD%A6%E9%99%,能返数据,一切正常,则可以确定是

    问题解决:

      使用encodeURI 对url进行编码处理

    相关知识:

    js编码个函数:escape,encodeURI,encodeURIComponent,相应解码函数:unescape,decodeURI,decodeURIComponent


    escape():
    采用unicode字符集对指定的字符串除0-255以外进行编码。所有的空格符、标点符号、特殊字符以及更多有联系非ASCII字符都将被转化成%xx格式的字符编码(xx等于该字符在字符集表里面的编码的16进制数字)。比如,空格符对应的编码是%20。
    escape不编码字符有69个:*,+,-,.,/,@,_,0-9,a-z,A-Z

    encodeURI():
    把URI字符串采用UTF-8编码格式转化成escape各式的字符串。
    encodeURI不编码字符有82个:!,#,$,&,',(,),*,+,,,-,.,/,:,;,=,?,@,_,~,0-9,a-z,A-Z

    encodeURIComponent() :
    把URI字符串采用UTF-8编码格式转化成escape格式的字符串。与encodeURI()相比,encodeURI()将对更多的字符编码,比如 / 等字符。所以假如字符串里面包含了URI的几个部份的话,不要用进行编码,否则 / 字符被编码之后URL将呈现错误。
    encodeURIComponent不编码字符有71个:!, ',(,),*,-,.,_,~,0-9,a-z,A-Z

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

    使用:

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

    例如:

    <script language="javascript">
    document.write('<a href="http://passport.baidu.com/?logout&aid=7&u='+encodeURIComponent("http://cang.baidu.com/bruce42")+'">退出</a>');
    </script>

    2、   进行url跳转时可以整体使用encodeURI

    例如:

    Location.href="/encodeURI"("http://cang.baidu.com/do/s?word=百度&ct=21");

    3、   js使用数据时可以使用escape

    例如:搜藏中history纪录
     

    参考:

    [1] JS中URL编码参数(UrlEncode)
    [2] javascript urlencode 推荐 encodeURIComponent

    [3] W3School

    知识共享许可协议
    作品Tim Zhang创作,采用知识共享署名 3.0 中国大陆许可协议进行许可。 。
  • 相关阅读:
    cinder支持nfs快照
    浏览器输入URL到返回页面的全过程
    按需制作最小的本地yum源
    创建可执行bin安装文件
    RPCVersionCapError: Requested message version, 4.17 is incompatible. It needs to be equal in major version and less than or equal in minor version as the specified version cap 4.11.
    惠普IPMI登陆不上
    Linux进程状态——top,ps中看到进程状态D,S,Z的含义
    openstack-neutron基本的网络类型以及分析
    openstack octavia的实现与分析(二)原理,架构与基本流程
    flask上下文流程图
  • 原文地址:https://www.cnblogs.com/ccdc/p/2458843.html
Copyright © 2011-2022 走看看