关于encodeURLComponent引申出来的杂谈

事情是这样的:因为在前端用ajax的get方法时,要传中文到后台,于是在前端用了encodeURLComponent()方法编码然后加到URL上,结果后台获取乱码了,于是就查了一些资料了解到:

我们后台使用的Tomcat默认是以ISO-8859-1,所以在获取到name时候容器已经解码过一次了,searchtext=java.net.URLDecoder.decode(name,"UTF-8");

所以解决办法有三个:

①前端使用一次encodeURLComponent()方法编码,后台使用这种方式String s = new String(request.getParameter("name").getBytes("ISO8859-1"), "UTF-8");

②前台使用二次encodeURLComponent()方法编码,后台使用这种方式searchtext=java.net.URLDecoder.decode(name,"UTF-8");解码

③直接修改tomcat下的conf/server.xml文件

关于encodeURLComponent引申出来的杂谈_第1张图片

关于encodeURLComponent引申出来的杂谈_第2张图片


然后我再讲讲encodeURL()和encodeURLComponent()方法

定义:Global对象的URL方法可以对URL进行解码,以便发送给浏览器。(有些浏览器会把中文转换为ISO-8859-1再发给服务器)

有效的URL不能包含某些字符,例如空格而这两个URL编码方法可以对URL进行编码,

它们能够将特殊的UTF-8编码替换所有无效的字符,从而让浏览器能够接受和理解

区别:encodeURL()主要用于整个URL,而encodeURLComponent()主要用于URL的某一段
区别原因:encodeURL()不会对本身属于URL的特殊字符进行编码,例如冒号、正斜杠、问号和井字号;
而encodeURLComponent()则会对任何非标准字符进行编码。一般用encodeURLComponent()方法更多,
因为实践中更常见的是对查询字符串参数而不是基础URL进行编码
这两个编码URL方法对应的解码URL分别是decodeURL()和decodeURLComponent(),解码和编码相应相生,要用就最好一起用,不要混搭

关于escape()方法和unescape()方法
这两个方法已经废弃了,最好是用URL方法。因为URL方法可以编码所有的Unicode(万能码)字符
而废弃的只能编码ASCII码

说到ASCII码,那就再聊下编码吧
ASCII码是美国标准信息交换码,只有7位。所以表达的东西也只能美国人用了
Unicode码是万能码,表达的东西就广泛得多了,各国语言都可表达,2个字节
UTF-8:8-bit Unicode Transformation Format,是一种针对Unicode可变长度字符编码,1-6个字节编码Unicode字符。
UTF-8存在原因:事实证明,对可以用ASCII表示的字符使用Unicode并不高效,因为Unicode(2字节)比ASCII(7位)占用大一倍的空间。

为了解决这个问题,出现了一些中间格式的字符集,他们成为通用转换格式,即UTF

顺便说说ISO-8859-1,通常叫做Latin-1,包含了书写所有西方欧洲语言不可缺少的附加字符,
是浏览器默认的编码,它是单字节编码,向下兼容ASCII,起编码范围是0x00-0xFF,
0x00-ox7F之间完全和ASCII一致,0x80-0x9之间是控制字符,0xA0-0xFF之间是文字符号。


你可能感兴趣的:(js/jquery)