问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
你好,欢迎来到懂视!登录注册
当前位置: 首页 - 正文

为什么服务器可以解析二次url编码后的数据

发布网友 发布时间:2022-05-18 00:10

我来回答

1个回答

热心网友 时间:2022-05-18 01:40

地址栏中出现汉字的情况有两种,一种是汉字出现在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()编码方式,乱码问题就解决了。
页面
var name=document.myForm.username.value;
var url="Ajax.do?method=check&name="+encodeURI(encodeURI(name));
xmlHttp.open("GET",url,true);
action中
String name = request.getParameter("name");
name = URLDecoder.decode(name, "UTF-8");
servlet返回数据时,将字符编码设置为utf-8就可以了,因为Ajax只支持utf-8
response.setContentType("text/xml;charset=utf-8");
PrintWriter out = response.getWriter();
out.print(result);
-----(以上答案 我在一个叫 燃烧这青春的空间看来得 ,希望帮的到你)
声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com
电脑今天玩游戏突然风扇转的很快.鲁大师显示cpu86度平均79度然后从开... SL400P9C开机后一直窝吱吱的声音是怎么回事?电流声就正常吗?国产货还能... 手机号给别人补号了后通话提示什么? 养小金鱼吃什么食物 给小金鱼吃什么 家里小金鱼吃什么食物 大拇指筋断了后遗症 ...第一次剪去它的五分之二,第二次剪去它的三分之一,这块步还剩几分之... 一根一米长的小棒第一次截去它的三分之一第二次截去剩下的三分之一第... ...第一次用去全长的三分之一,第二次用去五分之六米,还剩全长的50%,这... 月经推迟几天可以用试纸测出是否怀孕(女,31岁) 大姨妈推迟5天没有来 明天去医院检查可以验出来吗 朱自清的简介与他的所有著作 《匆匆》选自哪本书? 我觉得自己不是好女孩 什么是接吻抹胸 电动车一度电可以跑多少公里? 电动车一度电能充多久 天蓝色西装、香槟色领带,穿什么颜色的衬衣较好? 梦到自己摘了桑葚和李子还有梨 古代描述花生的诗句 谁有关于赞美花生的诗歌 花生的古诗 描写摘花生的诗? 关于落花生的诗词。快!! 赞美“花生”的诗句有哪些? 形容“花生”的诗句有哪些? 描写“花生”的诗句有哪些? 关于落花生的诗词有什么?要快!!! 落花生的古诗? 为什么我的iphone6 wifi总是自动断开 iPhone6 WiFi老是自动断开是怎么回事 单例中懒汉和饿汉的本质区别? iPhone6链接wifi锁屏一会后,就自动断开,怎么回事 苹果手机wifi自动断开什么原因 iqoo9是一款性能强悍的游戏手机,有哪些优缺点呢? iqooz1缺点 腾讯先游花钱吗 腾讯先游时间到了为啥还能玩 绩效实施与管理中的误区有哪些? 绩效管理咨询的绩效管理的误区 绩效管理误区指的是什么? 为什么我们很重视绩效考核,却总是失败 牛津树分级阅读绘本有实体店吗 英语牛津树分级3—5读到什么程度算过关 部队卫生员入党志愿书 itools怎么导入视频 请问武警部队用的入党志愿书是用什么材质的纸张做的? 越狱版的ipad air 用itools导入视频文件夹后去ipad的哪里查看? 用ITOOLS从电脑上复制到IPADMINI5上的视频文件存储在那个项目里,为什么找不到 ?请大侠教我,谢谢。
  • 焦点

最新推荐

猜你喜欢

热门推荐