`

URL Encoding

阅读更多

URL:http://localhost:8080/example/ 中 国?name=中国
汉字   编码      二进制表示
中国   UTF-8     0xe4 0xb8 0xad 0xe5 0x9b 0xbd[-28, -72, -83, -27, -101, -67]
中国   GBK       0xd6 0xd0 0xb9 0xfa[-42, -48, -71, -6]
中国   ISO8859-1 0x3f,0x3f[63, 63]信息失去


(一)、浏览器
1、GET方式提交,浏览器会对URL进行URL encode,然后发送给服务器。
(1) 对于中文IE,如果在高级选项中选中总以UTF-8发送(默认方式),则PathInfo是URL Encode是按照UTF-8编码,QueryString是按照GBK编码。
http://localhost:8080/example/ 中 国?name=中国
实际上提交是:
GET /example/%E4%B8%AD%E5%9B%BD?name=%D6%D0%B9%FA

(1) 对于中文IE,如果在高级选项中取消总以UTF-8发送,则PathInfo和QueryString是URL encode按照GBK编码。
实际上提交是:
GET /example/%D6%D0%B9%FA?name=%D6%D0%B9%FA

(3) 对于中文firefox,则pathInfo和queryString都是URL encode按照GBK编码。
实际上提交是:
GET /example/%D6%D0%B9%FA?name=%D6%D0%B9%FA

很显然,不同的浏览器以及同一浏览器的不同设置,会影响最终URL中PathInfo的编码。对于中文的IE和FIREFOX都是采用GBK编码 QueryString。

小结:解决方案:
1、URL中如果含有中文等非ASCII字符,则浏览器会对它们进行URLEncode。为了避免浏览器采用了我们不希望 的编码,所以最好不要在URL中直接使用非ASCII字符,而采用URL Encode编码过的字符串%.
比如:
URL:http://localhost:8080/example/ 中 国?name=中国
建议:
URL:http://localhost:8080/example/%D6%D0%B9%FA?name=%D6%D0%B9%FA

2、我们建议URL中PathInfo和QueryString采用相同的编码,这样对服务器端处理的时候会更加简单。

2、还有一个问题,我发现很多程序员并不明白URL Encode是需要指定字符集的。不明白的人可以看看这篇文档:http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/net/URLEncoder.html

2、 POST提交
        对于POST方式,表单中的参数值对是通过request body发送给服务器,此时浏览器会根据网页的ContentType("text/html; charset=GBK")中指定的编码进行对表单中的数据进行编码,然后发给服务器。
在服务器端的程序中我们可以通过 Request.setCharacterEncoding() 设置编码,然后通过request.getParameter获得正确的数据。

解决方案:
1、从最简单,所需代价最小来看,我们对URL以及网页中的编码使用统一的编码对我们来说是比较合适的。
如果不使用统一 编码的话,我们就需要在程序中做一些编码转换的事情。这也是我们为什么看到有网络上大量的资料介绍如何对乱码进行处理,其中很多解决方案都只是一时的权宜 之计,没有从根本上解决问题。

分享到:
评论

相关推荐

    urlcode解码-HTTP:URL编码解码

    urlcode解码,HTTP:URL编码解码-A codec for URL encoding and decoding

    原版PHProxy V0.5B2

    - More URL encoding methods - More browsing options - Support HTTP resuming - Support HTTP 1.1 - Support more response headers appropriately - Better "hosts" control - Improve URL proxification - ...

    URLexam - URL Encoding/decoding utility-开源

    URLexam是一个Web开发工具,可将文本编码为url编码的字符串,然后将url编码的字符串解码为纯文本。

    url自动编码

    url encoding助手,自动encode url或其他文本

    第3方支付DEMO

    根据HTTP协议要求,提交参数的值中若存在特殊字符(如:空格、@等)时,为使汇赢接口能接收到正确的参数,这些特殊字符需要做URL Encoding。需特别注意的是,此时待签名数据应该是原生值而不是encoding之后的值。

    parserDataWithKissXml

    encoding:NSUTF8StringEncoding error:&error]; [string release]; [self parsedDataFromString:content]; } -(void)parsedDataFromString:(NSString *)str{ [[UIApplication sharedApplication] ...

    CTF比赛编码工具Captfencoder-1.3.0

    Ascii Encoding Web Encoding Hex Encoding ...Url Encoding Html Entity Encoding Escape Encoding Quoted-printable(可打印字符引用编码) Morse Code(莫尔斯电码) Tap Code(敲击码)

    sinatra动态路线实验室v-000

    URL中的%符号称为URL encoding 。 基本上,它将用适当的ASCII字符替换对URL不安全的字符。 您可以查看,以获取有关不安全的url字符以及如何使用url编码进行更正的参考。指示在get '/reversename/:name'处创建一个...

    oreilly-http.pocket.reference.rar_Connections_HTTP协议

    1.6 URL Encoding 1.7 Client and Server Identification 1.8 Referring Documents 1.9 Retrieving Content 1.10 Media Types 1.11 Cookies 1.12 Authorization 1.13 Persistent Connections 1.14 ...

    poxy-0.5b2.zip

    - More URL encoding methods - More browsing options - Support HTTP resuming - Support HTTP 1.1 - Support more response headers appropriately - Better "hosts" control - Improve URL proxification - ...

    对python中url参数编码与解码的实例详解

    在python中url,对于中文等非ascii码字符,需要进行参数的编码与解码。 二、关键代码 1、url编码 对字符串编码用urllib.parse包下的quote(string, safe=’/’, encoding=None, errors=None)方法。 对json格式的参数...

    加密、解密工具

    支持多种格式加密: URL Encoding Base64 OverLing UTF-8 UTF-7 UU HTML<br>MD5<br>SHA1<br>SHA256<br>SHA384<br>SHA512<br>3DES (192bit/24 characters key)

    关于加密解密 Base64 and URL and Hex Encoding and Decoding

    关于加密解密 Base64 and URL and Hex Encoding and Decoding

    mod_encoding(apache支持中文路径工具)

    解决apache服务无法解析中文路径问题,内附说明

    mod_encoding.so

    Apache URL中不管中文是是UTF-8还是GBK编码都能正常解析。下载文件后的具体的配置方法请百度。 该文件编译环境Centos7 X86_64

    web程序开发中的URL乱码解决方案

    url=encodeURI(url);window.lo cation.href=url; (2).如果该超连接在页面中,可通过的onclick事件到js中通过上面的方法解决,也可..... 2.在服务器端/后台/后台程序中设置请求流和响应流的编码方式和页面上的编码...

    64位环境的mod_encoding模块

    用于解决apache软件对中文网址的支持问题。 通过测试环境:64位centos5.5 + apache2.2.15 此压缩包内含有补丁文件和操作说明文件,由福建吴世昌整理测试过。

    mod_encoding_64.tar.gz

    apache+tomcat url中文无法识别

    accept-encoding-range-test

    在,建议浏览器应发送Accept-Encoding: identity以及范围请求,否则某些服务器将忽略该范围并返回200。因此,这是一个测试! data.json包含中以mp3或mp4结尾的所有URL,并由主机进行重复数据删除。 警告:这些是来自...

    解决url中文乱码.doc

    解决java中url传参时出现的中文乱码,在传参页面用URLEncoder.encode("","UTF-8") 在显示页面jsp页面开头加, request.setCharacterEncoding("UTF-8")

Global site tag (gtag.js) - Google Analytics