今天在做项目的时候,要在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");
分享到:
相关推荐
遇到了变态很不常见的参数乱码的问题 首先看下页面 如图,月度指标下面也有同样的三个radio。 三个radio 下面是一个iframe,实现效果是,点击不同的radio显示不同的页面, 点击的时候传递带参数的网页地址。 (1)...
在网站有很多需要跳转的页面,而我们又需要动态地在主页面中加载子页面时,就会用到这门技术。以我们公司现在这个项目为例,前台是由FLEX实现,整个系统可能只有几个application组成,所有的功能点均由module实现,...
带有API的ChatGPT页面代表官方页面。您可以修改参数,将结果保存并下载为txt并提示。_Vue_HTML_下载.zip
ECSHOP 301重定向带动态页面跳转到静态页面插件 很多朋友在网站做了伪静态之后不会设置页面的301重定向
微信小程序的导航跳转分为navigateTo(保留当前页,跳转到应用内的其他页面,跳转非tabBar页面,可带参数,但是这里有个小坑,后面说), navigateBack(关闭当前页面,返回上一页面或多级页面), redirectTo...
最近在工作中遇到一个需求,有个页面 a.vm,对 ajax 请求的结果进行判断后,获取结果里面的数据传递给一个 URL(b.htm),跳转到新的页面 b.htm。 遇到的问题 因为一开始是 GET 请求,所以当传递的数据过大的时候,...
传参是前端经常需要用的一个操作,很多场景都会需要用到上个页面的参数,本文将会详细介绍vue router 是如何进行传参的,以及一些小细节问题。有需要的朋友可以做一下参考,喜欢的可以点波赞,或者关注一下,希望...
这种方式可以实现带参数的重定向,但是有弊端,即传中文可能会有乱码问题。 2. 使用 RedirectAttributes RedirectAttributes 是 Spring MVC 框架提供的一个工具类,可以帮助我们实现带参数的重定向。 attr....
Html.RenderAction 方式 是访问的另一页面的Controller,并将参数传入另一页面的Controller中相应的Action中的参数中。 例如:我有这么一个Controller和Action(是一个部分视图的) public class TopController : ...
获取access_token方式,参数{"path": "pages/index/index?query=1", "width": 260},可以获得图片二进制流,直接打印二进制流为乱码 (此图片来源于网络,如有侵权,请联系删除! ) 该二进制流直接保存成png图片...
解决上传文件enctype= multipart/form-data 时无法传递其他参数的问题,以及项目全局编码问题。用的插件是commons io + commons fileupload
第三方支付平台源码,商业支付源码,带支付 CK 参数获取器。前台带语音播报,带 demo,带 sdk。具体不会玩,整个是使用 iframe 框架的页面。 带有 CK 参数获取器软件,支持所有 COOKIE 支付。
模态框(Modal)是覆盖在父窗体上的子窗体。...以上所述是小编给大家介绍的Bootstrap 模态框(Modal)带参数传值实例,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的
IE9下使用window.open时需要注意name参数值不能有”-“出现,否则会出现脚本错误,IE9以及版本测试没有问题 window.open(URL,name,specs,replace) 参数 说明 URL 可选。打开指定的页面的URL。如果没有指定URL,...
本篇文章主要介绍了Android中Activity之间跳转和参数传递的实例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
但forward()无法重定向至有frame的jsp文件,可以重定向至有frame的html文件,同时forward()无法在后面带参数传递,比 如servlet?name=frank,这样不行,可以程序内通过response.setAttribute("name",name)来传至下一个 ...
mid=100的方式传递参数更灵活,你不需要设置路由,只需要在url后拼接参数即可,但是这种方式就需要通过javascript获取并提取url中的参数,通过传统的方式直接在页面中获取是行不通的了,因为vue中是无法通过location...
以下方法可以成功! @Override public void onClick(View view) {...当使用loadUrl加载网页的时候,有时候会出现调用系统浏览器加载网页的现象,网上大部分的解决方案是 : webView.setWebViewClient(new WebViewCli
微软公司推出的.NET框架...在Web环境中,页面之间的数据传递的方法又有了新的发展,可以通过传统的URL参数传递和会话级传递,以及通过ASP.NET服务器控件传递页面值。讨论了几种Web页面之间值传递方法的区别和实现方法