`
小古墓
  • 浏览: 58553 次
  • 性别: Icon_minigender_1
  • 来自: 山东
社区版块
存档分类
最新评论
阅读更多

今天在做项目的时候,要在js中拼SQL语句,然后传到后台查询。不可避免,SQL中存在“%”。结果到后台之后,报“java.io.CharConversionException:EOF异常”上网查资料得知,即对所传参数时字符编码解析失败。 有时引起的原因可能是:httpServletRequest对象中的键值对中包含:“%”。  java中对字符编码和解码提供了两个类:URLEncoder和URLDecoder,处理这些二进制,使用其加密的结果类似“%CC%DE%%”这样的字符串,因此java.io.CharConversionException:EOF异常的出现就和java的这个机制有关! 

       因此,最好避免使用含“%”或“%%”字符传入request对象中,解决这种异常可以用URLEncoder 类的encode()方法和URLDecoder类的decode()方法结合起来加解密这种方式来解决。如: 
页面中: 

Js代码  
var url = "modifyDepartment.action?name=" +cname;  
url=encodeURI(url);   


服务端获取: 

Java代码  
String name=request.getParameter("name");  
name = java.net.URLDecoder.decode(name,"UTF-8");  

     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版本就有。

 

解决方案:在js传参数的时候,先不用带有“%”,随便找个字符串代替。到后台之后,再用replaceAll替换。哈哈、好猥琐的一个方法,不过真管用。sql = java.net.URLDecoder.decode(sql.replaceAll("%", "%25"),"UTF-8"); 

 
分享到:
评论

相关推荐

    iframe下页面传参数为乱码问题探讨

    遇到了变态很不常见的参数乱码的问题 首先看下页面 如图,月度指标下面也有同样的三个radio。 三个radio 下面是一个iframe,实现效果是,点击不同的radio显示不同的页面, 点击的时候传递带参数的网页地址。 (1)...

    路由技术解决页面跳转问题

    在网站有很多需要跳转的页面,而我们又需要动态地在主页面中加载子页面时,就会用到这门技术。以我们公司现在这个项目为例,前台是由FLEX实现,整个系统可能只有几个application组成,所有的功能点均由module实现,...

    带有API的ChatGPT页面代表官方页面。您可以修改参数,将结果保存并下载为txt并提示。_Vue_HTML_下载.zip

    带有API的ChatGPT页面代表官方页面。您可以修改参数,将结果保存并下载为txt并提示。_Vue_HTML_下载.zip

    ECSHOP 301重定向带动态页面跳转到静态页面插件

    ECSHOP 301重定向带动态页面跳转到静态页面插件 很多朋友在网站做了伪静态之后不会设置页面的301重定向

    微信小程序跳转tabBar携带参数怎么办?

    微信小程序的导航跳转分为navigateTo(保留当前页,跳转到应用内的其他页面,跳转非tabBar页面,可带参数,但是这里有个小坑,后面说),  navigateBack(关闭当前页面,返回上一页面或多级页面),  redirectTo...

    在Js页面通过POST传递参数跳转到新页面详解

    最近在工作中遇到一个需求,有个页面 a.vm,对 ajax 请求的结果进行判断后,获取结果里面的数据传递给一个 URL(b.htm),跳转到新的页面 b.htm。 遇到的问题 因为一开始是 GET 请求,所以当传递的数据过大的时候,...

    vue router带参数页面刷新或回退参数消失的解决方法

    传参是前端经常需要用的一个操作,很多场景都会需要用到上个页面的参数,本文将会详细介绍vue router 是如何进行传参的,以及一些小细节问题。有需要的朋友可以做一下参考,喜欢的可以点波赞,或者关注一下,希望...

    spring mvc controller间跳转 重定向 传参

    这种方式可以实现带参数的重定向,但是有弊端,即传中文可能会有乱码问题。 2. 使用 RedirectAttributes RedirectAttributes 是 Spring MVC 框架提供的一个工具类,可以帮助我们实现带参数的重定向。 attr....

    MVC页面之间参数传递解析

    Html.RenderAction 方式 是访问的另一页面的Controller,并将参数传入另一页面的Controller中相应的Action中的参数中。 例如:我有这么一个Controller和Action(是一个部分视图的) public class TopController : ...

    小程序带参数二维码生成 c#后台代码

    获取access_token方式,参数{"path": "pages/index/index?query=1", "width": 260},可以获得图片二进制流,直接打印二进制流为乱码   (此图片来源于网络,如有侵权,请联系删除! )   该二进制流直接保存成png图片...

    上传文件fileupload+解决enctype= multipart/form-data无法传递其他参数

    解决上传文件enctype= multipart/form-data 时无法传递其他参数的问题,以及项目全局编码问题。用的插件是commons io + commons fileupload

    第三方支付平台源码 商业支付源码带支付CK参数获取器

    第三方支付平台源码,商业支付源码,带支付 CK 参数获取器。前台带语音播报,带 demo,带 sdk。具体不会玩,整个是使用 iframe 框架的页面。 带有 CK 参数获取器软件,支持所有 COOKIE 支付。

    Bootstrap 模态框(Modal)带参数传值实例

    模态框(Modal)是覆盖在父窗体上的子窗体。...以上所述是小编给大家介绍的Bootstrap 模态框(Modal)带参数传值实例,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的

    js中window.open的参数及注意注意事项

    IE9下使用window.open时需要注意name参数值不能有”-“出现,否则会出现脚本错误,IE9以及版本测试没有问题 window.open(URL,name,specs,replace) 参数 说明 URL 可选。打开指定的页面的URL。如果没有指定URL,...

    Android中Activity之间跳转和参数传递的实例

    本篇文章主要介绍了Android中Activity之间跳转和参数传递的实例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    java五种jsp页面跳转方法详解

    但forward()无法重定向至有frame的jsp文件,可以重定向至有frame的html文件,同时forward()无法在后面带参数传递,比 如servlet?name=frank,这样不行,可以程序内通过response.setAttribute("name",name)来传至下一个 ...

    vue不通过路由直接获取url中参数的方法示例

    mid=100的方式传递参数更灵活,你不需要设置路由,只需要在url后拼接参数即可,但是这种方式就需要通过javascript获取并提取url中的参数,通过传统的方式直接在页面中获取是行不通的了,因为vue中是无法通过location...

    解决webview 第二次调用loadUrl页面不刷新的问题

    以下方法可以成功! @Override public void onClick(View view) {...当使用loadUrl加载网页的时候,有时候会出现调用系统浏览器加载网页的现象,网上大部分的解决方案是 : webView.setWebViewClient(new WebViewCli

    在ASP.NET中实现Web页面值传递方法的比较

    微软公司推出的.NET框架...在Web环境中,页面之间的数据传递的方法又有了新的发展,可以通过传统的URL参数传递和会话级传递,以及通过ASP.NET服务器控件传递页面值。讨论了几种Web页面之间值传递方法的区别和实现方法

Global site tag (gtag.js) - Google Analytics