`
Johnny_GZ
  • 浏览: 179925 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

JS中URL编码参数(转) --- 乱码经过编码两次得以解决

阅读更多
网上有很多文字作品写涉及在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。


地址栏中出现汉字的情况有两种,一种是汉字出现在URL的路径部分,一种是汉字出现在URL的传参的部分,第二种情况的时候必须采用编码后传参,接受时解码的方式完成传参。js中编码有escape(),encodeURI(),encodeURIComponent()三个常用的方法,escape()常常用在提交页面和处理页面的编码格式相同的情况下(比如它们都是GB2312),encodeURI()和encodeURIComponent()的用法基本相同,区别在于encodeURIComponent()也对"?"等特殊字符进行编码。
一开始遇到中文参数的时候,使用encodeURI()进行了一遍编码,传过去后,发现解码出现问题,于是想到可能是编码方法使用错误,于是使用escape()方法,这时发现解码时抛出isHexDigit异常。借助百度搜索isHexDigit异常,
发现原来,是escape()方法造成了异常,同时了解了浏览器传递地址的一些原理,在浏览器地址栏里,浏览器认为%是个转义字符,浏览器会把%与%之间的编码,两位两位取出后进行解码,然后再传递给处理页面,
然后由处理页面进行再次解码。由此我想到一直使用encodeURI方法是正确的,只是需要使用两次encodeURI方法,例如encodeURI(encodeURI("中文"));第一次是把中文编码成%xy的格式,
第二次是对%xy中的%进行编码,%编码成%25。整个传参过程大体应该是:提交页面使用encodeURI(encodeURI("中文"))编码,把最后的编码结果%25xy传递给处理页面的过程中,浏览器获取URL地址
(注意openModelDialog方法,浏览器获取不到参数编码)后解码成%xy,然后把%xy传递给处理页面,处理页面使用URLDecoder.decode(request.getParameter("参数名"),"UTF-8");完成解码。
总结:
1、汉字出现在URL路径部分的时候不需要编码解码;
2、使用encodeURI进行2次编码;
3、在openModelDialog()打开的模式窗体里没办法用request.getParameter正确获取参数;


客户端和服务器在传递数据时可以用过滤器filter解决字符编码问题,但filter只能解决post方式提交的数据。对于get方式,可以使用两次encodeURI(encodeURI(“中文”))并在服务器中使用URLDecoder.decode(“中文”, "UTF-8");

今天用Ajax校验数据时也遇到这个问题,尽管页面、类和web容器都统一了字符编码,提交的数据依然是乱码,所以就采用了2次encodeURI()编码方式,乱码问题就解决了。
页面
/exportExcel.topinfo?ls="+encodeURI(encodeURI(_tmplsgx))+"&zt="+encodeURI(encodeURI(_tmpzt))s
action中
  String ls=request.getParameter("ls");
   ls = new String(ls.getBytes("iso-8859-1"),"utf-8");
   ls = java.net.URLDecoder.decode(ls,"UTF-8");
这样乱码就解决了。
分享到:
评论

相关推荐

    java中文乱码之解决URL中文乱码问题的方法

    总之,解决Java中的URL中文乱码问题需要理解URL编码的原理,并在客户端和服务器端采取相应的措施,确保编码和解码的一致性。无论是通过JavaScript编码、Java服务器端解码,还是调整服务器配置,关键在于确保字符集的...

    jquery获取URL中参数解决中文乱码问题的两种方法

    以上两种方法在处理URL中的参数时,需要注意如果参数值中包含中文字符,那么在发送参数之前需要对其进行URL编码(使用 `encodeURI` 函数),在接收参数之后需要对URL编码的字符串进行解码(使用 `decodeURI` 函数)...

    JavaScript获取Url中的参数(解决中文乱码)

    JavaScript获取Url中的参数(解决中文乱码) 可以点击更改URL按钮 修改url中的参数

    asp.net中URL参数传值中文乱码的三种解决办法

    在ASP.NET开发过程中,我们时常会遇到URL参数传递中文字符时出现乱码的问题。这个问题主要源于字符编码不一致导致的,下面将详细讲解三种解决这个问题的方法。 ### 方法一:设置Web.config配置 在ASP.NET应用的`...

    php中url地址栏传参数中文乱码解决方法汇总

    php 中 URL 地址栏传参数中文乱码解决方法汇总 PHP 中 URL 地址栏传参数中文乱码解决方法汇总是指在 PHP 编程中,如何解决 URL 地址栏传参数中文乱码的问题。这个问题是由于浏览器和服务器之间的编码问题引起的。 ...

    maven-javadoc-plugin 中文 注释 API 解决乱码 pom xml

    ### Maven-javadoc-plugin 中文注释 API 解决乱码及时间问题详解 #### 一、背景介绍 在软件开发过程中,API文档对于提高代码可读性、方便团队成员之间的交流至关重要。Maven作为一款强大的自动化构建工具,在项目...

    DELPHI 10.3编码转换 iso-8859-1转GBK,GBK转iso-8859-1

    本文将深入探讨标题提及的“DELPHI 10.3编码转换:iso-8859-1转GBK,GBK转iso-8859-1”,以及在二维码生成中的应用,以解决乱码问题。 首先,我们需要理解两种编码系统的基础知识。`ISO-8859-1`是一种单字节编码...

    有关pdfbox-1.3.1中Identity-H编码为乱码的解决方法

    在版本1.3.1中,用户可能会遇到使用Identity-H编码时出现乱码的问题。Identity-H编码是一种无损的Unicode编码方式,它允许PDF文档包含任何Unicode字符,但如果没有正确处理,就可能导致中文、日文或其他非ASCII字符...

    乱码 编码方式解决 gbk ISO8859-1 utf8 编码

    本文将针对标题中的几种常见编码格式(GBK、ISO 8859-1、UTF-8)以及如何解决由这些编码方式引发的乱码问题进行深入探讨。 #### 一、编码概述 1. **GBK编码**:GBK是GB2312标准的扩展,支持简体中文,是Microsoft ...

    修改 CMD 编码为 UTF-8 (解决 VS Jupyter 乱码等情况)

    操作方法(需要管理员权限): !!! 执行前,请务必备份注册表 1. 解压压缩包 2. 双击 .reg 注册表文件导入 更多内容可参考:...适合人群:需要修改 CMD 编码为 UTF-8 的人群

    乱码问题的解决

    "乱码问题的解决" 在 Web 开发中,乱码问题是常见的...乱码问题的解决需要从多方面入手,包括设置页面编码、服务器编码、客户端编码、数据库编码和超链接的 url 编码等。只有通过统一编码,才能避免乱码问题的出现。

    js实现GBK编码,避免默认utf-8编码

    前端页面通过ajax发送请求,参数都是默认使用utf-8编码格式对参数进行url编码,这样的后果就是,当后台页面如果使用gbk编码的话,会出现乱码的情况,然后网上找到一个大神写的gbk.js. 但是里面没有做出详细介绍,这里...

    教学视频--JSP中URL传递中文乱码问题的解决演示.rar

    然而,在实际操作中,我们时常会遇到一个问题,那就是当JSP页面通过URL传递包含中文字符的参数时,可能会出现乱码现象。这个问题主要源于HTTP协议的特性以及字符编码的处理不当。本教学视频将详细讲解如何解决JSP中...

    url传值到Action乱码解决方案

    URL传值到Action乱码解决方案 在Web应用程序中,URL传值到Action是一个常见的操作,但是当传递中文参数时,经常会出现乱码问题。今天,我们将讨论如何解决URL传值到Action乱码问题,特别是在Struts2框架中。 乱码...

    Node.js-iconv-lite-纯javascript转换字符编码

    这个库主要设计用于解决 Node.js 应用程序在处理多语言或多编码数据时遇到的问题。`iconv-lite` 支持多种常见的字符编码,如 UTF-8、GBK、BIG5、ISO-8859-1 等,使得开发者能够轻松地在不同编码之间进行转换,避免...

    MFC UTF-8文件批量转成GB2312 解决中文乱码问题

    在本场景中,我们面对的问题是“MFC UTF-8文件批量转成GB2312 解决中文乱码问题”,这涉及到文件的读取、编码转换以及文件的写入操作。 首先,我们需要理解UTF-8和GB2312这两种编码的区别。UTF-8是一种变长的...

Global site tag (gtag.js) - Google Analytics