URL传递中文参数

来源:互联网 发布:php文件上传源码 编辑:程序博客网 时间:2024/05/03 03:23

开发中文类网站,编码问题是一个无法回避的问题,主要涉及到数据库编码、网页文件编码、URL编码、JSP引擎编码问题,而URL编码和数据库编码问题尤为突出。

    URL编码过程如下:

1.浏览器对提交URL进行编码,并提交给服务器

2.浏览器对URL进行解码,处理完毕将数据返回给浏览器

3.浏览器按照指定的编码格式显示

    这个过程总共涉及到两次编码两次解码,任何一次出错都将导致乱码,即便是我们指定了编码格式,乱码也是经常出现,主要原因在于浏览器,由于RFC1738规定:只有字母和数字[0-9a-zA-Z]、一些特殊符号"$-_.+!*'(),[不包括双引号]、以及某些保留字,才可以不经过编码直接用于URL。并没有规定中文字符要怎么编码,具体的编码交给浏览器,这就造成不同的浏览器对中文的编码格式可能会不同,即便是同一浏览器也会因为不同设置而对URL采取不同的编码,有没有一个通用的方法解决编码问题呢?

    问题的关键在于浏览器的编码过程我们是不可控的,我们可以控的是服务端解码方案的设计,如果我们能让浏览器不对非ASCII字符进行编码这个问题就可以解决了,仔细审读RFC1738文档我们发现ASCII码字符浏览器不会对其编码,所以我们将中文编码为ASCII码,在服务端再解析出来就可以了,什么编码满足这个要求呢?答案就是UTF-8编码,我们可以先对中文进行UTF-8编码,浏览器就不会再次编码了,到达服务端再采取UTF-8解码,这样就就能还原中文了。

    是不是URL采用UTF-8编码就万事大吉了,答案是否定的,在这里我们还是有必要说明一下,在各种语言中编码函数有多种,需要注意其会对那些字符进行编码,比如在JavaScript中encodeURI就不会对’/’进行编码,而java里encode函数就会对’/’进行编码,会导致路径找不到,提示400错误。是不是我们只对中文进行UTF-8编码,再按UTF-8解码就完美了,也不是,这里还要涉及到操作系统编码问题,如果不加考虑操作系统编码,这接按UTF-8解码,也会造成无法找到对应文件(假定使用的是windows简体中版)。

    综上所述,比较完美的URL中文传输解决方案是:只编码需要编码的部分,解码则要考虑接收方的编码方式。

0 0
原创粉丝点击