资讯专栏INFORMATION COLUMN

URL传递中文编码的解决方案

legendmohe / 1230人阅读

摘要:如果使用进行了一遍编码,传过去后,发现解码出现问题,需要使用两次方法,例如中文第一次是把中文编码成的格式,第二次是对中的进行编码编码成。

网页URL的合法字符分成两类。

URL元字符:分号(;),逗号(’,’),斜杠(/),问号(?),冒号(:),at(@),&,等号(=),加号(+),美元符号($),井号(#)

语义字符:a-z,A-Z,0-9,连词号(-),下划线(_),点(.),感叹号(!),波浪线(~),星号(*),单引号(),圆括号(()`)

除了以上字符,其他字符出现在URL之中都必须转义,规则是根据操作系统的默认编码,将每个字节转为百分号(%)加上两个大写的十六进制字母。比如,UTF-8的操作系统上,http://www.example.com/q=春节这个URL之中,汉字“春节”不是URL的合法字符,所以被浏览器自动转成http://www.example.com/q=%E6%98%A5%E8%8A%82

其中,“春”转成了%E6%98%A5,“节”转成了%E8%8A%82。这是因为“春”和”节“的UTF-8编码分别是E6 98 A5E8 8A 82,将每个字节前面加上百分号,就构成了URL编码。

encodeURI 方法的参数是一个字符串,代表整个URL。它会将元字符和语义字符之外的字符,都进行转义。encodeURIComponent只转除了语义字符之外的字符,元字符也会被转义。因此,它的参数通常是URL的路径或参数值,而不是整个URL

decodeURI用于还原转义后的URL。它是encodeURI方法的逆运算。decodeURIComponent用于还原转义后的URL片段。它是encodeURIComponent方法的逆运算。

在浏览器地址栏里,浏览器认为%是个转义字符,浏览器会把%与%之间的编码,两位两位取出后进行解码,然后再传递给后端,然后由后端进行再次解码。

如果使用encodeURI()进行了一遍编码,传过去后,发现解码出现问题,需要使用两次encodeURI方法,例如encodeURI(encodeURI("中文"));第一次是把中文编码成%xy的格式,第二次是对%xy中的%进行编码%编码成%25

字符 说明 转化
+ URL 中+号表示空格 %2B
空格 URL中的空格可以用+号或者编码 %20
/ 分隔目录和子目录 %2F
? 分隔实际的URL和参数 %3F
% 指定特殊字符 %25
v# 表示书签 %23
& URL 中指定的参数间的分隔符 %26
= URL 中指定参数的值 %3D

参考:阮一峰的 《JavaScript参考教程》

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/91963.html

相关文章

  • 深入分析 Java Web 中中文编码问题

    摘要:文章首发地址深入分析中的中文编码问题背景编码问题一直困扰着程序开发人员,尤其是在中更加明显,因为是跨平台的语言,在不同平台的编码之间的切换较多。 文章首发地址:深入分析 Java Web 中的中文编码问题 背景: 编码问题一直困扰着程序开发人员,尤其是在 Java 中更加明显,因为 Java 是跨平台的语言,在不同平台的编码之间的切换较多。接下来将介绍 Java 编码问题出现的根本原...

    jsyzchen 评论0 收藏0
  • web开发中URL编码简介

    摘要:大部分需要编码的原因是由于有特殊字符如等或者参数是中文形式。不会被此方法编码的字符重点因此,对于中文字符串来说,如果不希望把字符串编码格式转化成格式的比如原页面和目标页面的是一致的时候,只需要使用。 一、为什么要 urlencode()? 因为当字符串数据以url的形式传递给web服务器时,字符串中是不允许出现空格和特殊字符的。 也就是说,url的参数传递的时候,需要遵循一定的url...

    forsigner 评论0 收藏0
  • web开发中URL编码简介

    摘要:大部分需要编码的原因是由于有特殊字符如等或者参数是中文形式。不会被此方法编码的字符重点因此,对于中文字符串来说,如果不希望把字符串编码格式转化成格式的比如原页面和目标页面的是一致的时候,只需要使用。 一、为什么要 urlencode()? 因为当字符串数据以url的形式传递给web服务器时,字符串中是不允许出现空格和特殊字符的。 也就是说,url的参数传递的时候,需要遵循一定的url...

    xiao7cn 评论0 收藏0
  • Servlet第四篇【request对象常用方法、应用】

    摘要:浏览器的中文数据提交给服务器,以编码对中文编码,当我在读取数据的时候,拿到的当然是乱码。接下来使用方式传递中文数据,把表单的方式改成即可当我们访问的时候,又出现乱码了于是我按照上面的方式,把对象设置编码为试试结果还是乱码。 什么是HttpServletRequest HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信...

    CoorChice 评论0 收藏0
  • Servlet第四篇【request对象常用方法、应用】

    摘要:浏览器的中文数据提交给服务器,以编码对中文编码,当我在读取数据的时候,拿到的当然是乱码。接下来使用方式传递中文数据,把表单的方式改成即可当我们访问的时候,又出现乱码了于是我按照上面的方式,把对象设置编码为试试结果还是乱码。 什么是HttpServletRequest HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信...

    DevYK 评论0 收藏0

发表评论

0条评论

legendmohe

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<