`

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

分享到:
评论

相关推荐

    vc URL编解码类

    为了解决这个问题,人们引入了URL编码(URL Encoding),也称为百分号编码(Percent-Encoding)。在VC++环境下,我们可以使用特定的类来实现URL编码和解码的功能。 "vc URL编解码类"是指在VC++环境中开发的一组工具...

    url加密URL编码 如“exit”编码为“%65%78%69%74”.zip

    这个压缩包文件的标题和描述提及了“url加密”和“URL编码”,实际上,它们指的是同一个概念,即URL编码(URL Encoding)。URL编码是根据统一资源定位符(Uniform Resource Locator)标准,将URL中的特殊字符转换为...

    URL编码解码器

    URL编码(URL Encoding)是互联网应用中常见的数据处理方式,主要目的是为了确保非ASCII字符或者特殊字符在HTTP请求中能够正确传输。在Web开发中,当我们需要在URL中包含空格或其他非字母数字字符时,就需要对这些...

    url转码,base64等好用转码小工具

    URL转码(URL Encoding)是将URL中的特殊字符转换成ASCII编码的一种方法,因为URL只能包含ASCII字符集。常见的比如空格被转换为"%20","&"转换为"%26"等。这是为了确保URL在不同系统间传输时不会引起解析错误。URL...

    url decode 源码

    在IT行业中,URL编码(又称为percent-encoding)是一种用于在网络应用中表示非ASCII字符或特殊字符的标准。URL编码是URI(统一资源标识符)的一部分,确保数据可以在URL中安全传输。当我们看到像"%20"这样的序列时,...

    原版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或其他文本

    CTF工具-CyberChef-v10.19.0

    CTF工具-CyberChef_v10.19.0,网络版的瑞士军刀,能够执行包括加密、编码、压缩以及数据分析在内的多种操作,支持Base64、Hexadecimal(十六进制)、URL Encoding等多种常见的编码方式,除了基本的编码和加密操作,...

    第3方支付DEMO

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

    易语言通过PHP发送QQ消息

    URL编码(URL Encoding)在其中起着关键的作用。因为URL中不能包含某些特殊字符,如空格、&等,所以在将数据拼接到URL中时,需要对这些字符进行编码。在PHP中,可以使用`urlencode()`函数进行编码;而在易语言中,...

    google 浑天仪

    【描述】:在提取出的“浑天仪”应用程序中,配置文件被编码处理,这可能意味着原始数据被转化为URL编码(URL Encoding)的形式,以适应在网络传输中的安全性和可读性。URL编码是一种标准的编码机制,它将非ASCII...

    商汇通说明文档1

    - 参数值中如有特殊字符,需按照HTTP协议要求进行URL Encoding,但签名时应使用原始值而非编码后的值。 - 下行异步通知是必须的,商户系统收到通知后需返回opstate=0,以确认已接收结果。接口会根据返回值决定是否...

    parserDataWithKissXml

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

    mod_encoding_2010.zip

    "mod_encoding_2010.zip"这个压缩包文件,显然与Apache服务器的一个特定模块——mod_encoding有关,该模块主要解决的是Apache在处理包含非ASCII字符(如中文)的URL路径时的问题。 Apache默认情况下,可能会对包含...

    64位环境的mod_encoding模块

    针对中文网址(中文URL)的支持问题,"64位环境的mod_encoding模块"提供了一个解决方案。这个模块是专门为了解决在64位操作系统,如64位CentOS 5.5上,Apache2.2.15版本对中文URL处理不兼容的问题而设计的。 Apache...

    mod_encoding-

    1. **URL编码**:当客户端发送请求时,`mod_encoding`会检测URL中的非ASCII字符,并根据预设规则将其转换为适合服务器处理的格式。 2. **内部转换**:服务器接收到请求后,模块将内部存储的URL编码解码为正确的字符...

    iOS NSString详细操作

    NSString *content = [[NSString alloc] initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil]; ``` #### 三、使用`NSString`对象 1. **输出到控制台**: - 使用`NSLog`函数可以方便地将`...

    Gma.QrCodeNet.Encoding.Net35.dll、Gma.QrCodeNet.Encoding.Net45.dll二维码工具类库

    - **编码能力**:Gma.QrCodeNet库支持多种数据编码格式,包括数字、字母、二进制数据以及URL、电话号码、邮件地址等多种特殊模式。 - **错误纠正**:提供L、M、Q、H四个级别的错误纠正,可以在部分数据丢失或损坏...

Global site tag (gtag.js) - Google Analytics