url中传递中文参数时的转码与解码

    技术2022-07-14  77

    URL  中用get 方式传递中文参数,会造成乱码的情况,可以采用前台用JS 编码+后台action 解码的方式解决。但是有时候,后台的action 不可见的时候,就需要在前台 用 JS 完成编码+解码的工作。

    1、escape 和 unescape

    原理:对除ASCII字母、数字、标点符号 @  *  _  +  -  .  / 以外的其他字符进行编码。

    编码:escape('http://www.baidu.com?name=zhang@xiao@jie&order=1')

       结果:"http://www.baidu.com?name=zhang@xiao@jie&order=1"

       escape('张')

       结果:"%u5F20"

    解码:unescape("http://www.baidu.com?name=zhang@xiao@jie&order=1")

       结果:"http://www.baidu.com?name=zhang@xiao@jie&order=1"

       unescape("%u5F20")

       结果:"张"

    2、encodeURI 和 decodeURI

    原理:返回编码为有效的统一资源标识符 (URI) 的字符串,不会被编码的字符:! @ # $ & * ( ) = : / ; ? + '

         encodeURI()是Javascript中真正用来对URL编码的函数。

    编码:encodeURI('http://www.baidu.com?name=zhang@xiao@jie&order=1')

       结果:"http://www.baidu.com?name=zhang@xiao@jie&order=1"

    使用java.net.URLDncoder.decode("xxxx",“utf-8")将16进制字符转为中文。

    这种方式需要注意的是,在使用encodeURI转码后,会出现特殊字符,这时候,就需要将特殊字符也转码,所以使用两次encodeURI,即:

    encodeURI(encodeURI(“xxxx”))。

    解码:decodeURI("http://www.baidu.com?name=zhang@xiao@jie&order=1")

       结果:"http://www.baidu.com?name=zhang@xiao@jie&order=1"

    3、encodeURIComponent 和 decodeURIComponent

    原理:对URL的组成部分进行个别编码,而不用于对整个URL进行编码

    编码:encodeURIComponent('http://www.baidu.com?name=zhang@xiao@jie&order=1')    结果:"http://www.baidu.com?name=zhang@xiao@jie&order=1"

    解码:decodeURIComponent("http://www.baidu.com?name=zhang@xiao@jie&order=1")

       "http://www.baidu.com?name=zhang@xiao@jie&order=1"

    Processed: 0.021, SQL: 9