zoukankan      html  css  js  c++  java
  • URL编码解决

    与其他系统对接时遇到的问题

    URL中传递认证码,
    URL默认只允许传递ASCII码中的数据,所以浏览器默认会进行一次编码

    将%等特殊符号转义


    后台web服务器收到URL中的参数,会默认进行一次解码,
    但遇到的问题是参数中含有+号的 会被解码成空格


    解决办法:

    方法一、修改客户端

    将客户端带“+”的参数中的“+”全部替换为‍“2B%”,这样参数传到服务器端时就能得到“+”了。

    方法二

    修改服务器端,将空格替换为“+”,这种方式只适用于参数中有‍“+”没有空格的情况。

    例子:

    String a = reuqest.‍getParameter("clientStr")‍.replace(' ','+');



    以上仅仅针对GET请求













    URL中文转码


    encodeURL函数主要是来对URI来做转码,它默认是采用的UTF-8的编码.
    . UTF-8编码的格式:一个汉字来三个字节构成,每一个字节会转换成16进制的编码,同时添加上%号.

    假设页面端输入的中文是一个“中”,按照下面步骤进行解码
    1.第一次encodeURI,按照utf-8方式获取字节数组变成[-28,-72-83],对字节码数组进行遍历,把每个字节转化成对应的16进制数,这样就变成了[E4,B8,AD],最后变成[%E4,%B8,%AD] 此时已经没有了多字节字符,全部是单字节字符。
    2、第二次encodeURI,进行编码,会把%看成一个转义字符,并不编码%以后字符,会把%编码成%25.把数组最后变成[%25E4,%25B8,%25AD]然后就把处理后的数据[%25E4,%25B8,%25AD]发往服务器端,
    当应用服务器调用getParameter方法,getParameter方法会去向应用服务器请求参数
    应用服务器最初获得的就是发送来的[%25E4,%25B8,%25AD],应用服务器会对这个数据进行URLdecode操作,应用服务器进行解码的这一次,不管是按照UTF-8,还是GBK,还是ISO-8859,,都能得到[%E4,%B8,%AD],因为都会把%25解析成%.并把这个值返回给getParameter方法
    3、再用UTF-8解码一次,就得到"中"了。
    想想看,如果不编码两次,当服务器自动解码的时候,假如是按照ISO-8859去解码UTF-8编码的东西,就是会出现乱码。
    JS:
    [sql] view plain copy
    document.authorityForm.action = basePath3+"User_viewUser.do?id="+id+"&roleName="+encodeURI(encodeURI(roleName))+"&roleType="+roleType;

    Java后台:

    [sql] view plain copy
    roleName = java.net.URLDecoder.decode(getRequest().getParameter("roleName"),"UTF-8");


  • 相关阅读:
    iOS开发——iOS10升级极光推送SDK、友盟分享SDK
    iOS动画——弹窗动画(pop动画)
    iOS动画——文字晃动
    iOS安全——代码混淆&反编译
    iOS学习——iOS视频和推荐网站
    iOS开发——消息推送跳转
    iOS开发——时间格式类
    iOS开发——锁屏监听
    iOS开发——毛玻璃透明
    iMAC——全新重装Mac系统
  • 原文地址:https://www.cnblogs.com/Dhouse/p/6096715.html
Copyright © 2011-2022 走看看