zoukankan      html  css  js  c++  java
  • url中文参数解决方案

    首先,弄清楚为什么url传递中文会转码或者乱码,以及http头

    contentType="text/html; charset=GBK"

    的作用。

    html代码会经过web服务器,浏览器处理,所以造成转码或者乱码的原因,可能涉及到:页面本身的设置、web服务器的设置、浏览器的设置。

     

    在动态页面,比如jsp、php中,可以设置

    contentType="text/html; charset=GBK"

    在服务器,比如apache中可以在web.xml中设置

    <Connector port="8080" protocol="HTTP/1.1"
                   connectionTimeout="20000"
                   redirectPort="8443" URIEncoding="utf-8"/>

    在Spring、Struts等插件中还可以配置页面过滤器。

    在IE等浏览器中可以设置强制的url编码规则。

     

    但是按照网络标准RFC-1738规定,一般的浏览器都是以utf-8或者gbk等方式来编码url的。

     

    解决乱码要从根源入手,根源是什么?刚才我说了,处理html的顺序是:页面本身的设置、web服务器的设置、浏览器的设置。那么最有效的方式就是照顾到浏览器。

     

    在web.xml或者Spring、Struts等中我们都不用管,因为他们是间接的方式,不一定其作用。

     

    怎么照顾到浏览器?就是将url的编码规则自己指定。接收的时候自己解码。

     

    制定url编码规则很简单,就是将url先用utf-8编码,编码结果是英文、数字、百分号等符合网络标准RFC-1738的格式。

     

    编码的方法可以在服务器端的程序中进行,但那样效率太低。javascript已经做好了这方面的工作,只需要调用encodeURI()或者encodeURIComponent()函数即可。

     

    要在href、src等处调用javascript的函数,方法如下:

    一、在HTML里可以通过"javascript:"方式调用JavaScript的函数或方法,如下所示:
    <html>
     <head>
      <title>使用“javascript:”</title>
     </head>
     <body>
      <a href="javascript:alert('您点击了这个超链接')">请点我</a>  
     </body>
    </html>

    二、  "javascript:"不但可以调用JavaScript的方法,也可以调用用户自定义的函数,如下代码所示:
    <html>
     <head>
      <title>使用“javascript:”</title>
      <script language="javascript" type="text/javascript">
       <!--
        function OnclickLink()
        {
         alert("您点击了这个按钮");
        }
       -->
      </script>
     </head>
     <body>
      <a href="javascript:OnclickLink()">请点我</a>
     </body>
    </html>

    三、与事件结合
    <html>
     <head>
      <title>与事件相结合</title>
      <script language="javascript" type="text/javascript">
       <!--
        function OnMouseOverLink()
        {
         alert("您的鼠标从第一个超链接上划过");
        }
       -->
      </script>
     </head>
     <body>
      <a href="#" onmouseover="OnMouseOverLink()">请将鼠标放在上面</a><br>
      <a href="#" onclick="javascript:alert('您点击了第二个超链接')">请点我</a>  
     </body>
    </html>

     

    传递中文URL的解决方案如下:

    <a href="javascript:location=encodeURI('/zollty/search.jsp?form_project=金海湾');">金海湾</a>

    点击超链接时实际上要激发javascript函数才其作用,我们不能写成如下形式:

    <a href='encodeURI("/zollty/search.jsp?form_project=金海湾")'>金海湾</a>

    因为上面的写法在未点击超链接时,href的值就是包含javascript代码的原原本本的字符串,点击后才执行encodeURI()函数,而超链接会以url为“encodeURI("/zollty/search.jsp?form_project=金海湾”来跳转,显然是找不到这个页面的。

     

    最好是写成如下形式:

    <a href="javascript:void(0)" onclick="location.href=encodeURI('/zollty/search.jsp?form_project=金海湾');">金海湾</a>

    其含义更加明了。

     

    另外就是表单中提交中文的问题,通过设置页面的

    contentType="text/html; charset=GBK"

    就可以解决。


     



  • 相关阅读:
    PAT (Advanced Level) Practice 1055 The World's Richest (25 分) (结构体排序)
    PAT (Advanced Level) Practice 1036 Boys vs Girls (25 分)
    PAT (Advanced Level) Practice 1028 List Sorting (25 分) (自定义排序)
    PAT (Advanced Level) Practice 1035 Password (20 分)
    PAT (Advanced Level) Practice 1019 General Palindromic Number (20 分) (进制转换,回文数)
    PAT (Advanced Level) Practice 1120 Friend Numbers (20 分) (set)
    从零开始吧
    Python GUI编程(TKinter)(简易计算器)
    PAT 基础编程题目集 6-7 统计某类完全平方数 (20 分)
    PAT (Advanced Level) Practice 1152 Google Recruitment (20 分)
  • 原文地址:https://www.cnblogs.com/jarl/p/5893039.html
Copyright © 2011-2022 走看看