- 浏览: 481112 次
- 性别:
- 来自: 湖南
文章分类
- 全部博客 (201)
- j2ee (43)
- oracle (9)
- mysql (7)
- db2 (1)
- j2se (3)
- spring (1)
- hibernate (3)
- struts (0)
- Berkeley DB (0)
- linux (60)
- Apache2+PHP+MYSQL (2)
- solr (15)
- svn (1)
- IntelliJ Idea (1)
- eclipse,myeclipse (4)
- ant (2)
- vim (8)
- IT生活 (4)
- 测试 (6)
- lucene (4)
- shell (1)
- nutch (18)
- thread (1)
- hadoop (5)
- mapreduce (0)
- Python (4)
- 硬件 (1)
- database (1)
- maven (1)
- 正则表达 (0)
- 互联网 (1)
最新评论
-
youngcoder:
good job
HTTP协议头部与Keep-Alive模式详解 -
javazdq:
受教了 解释的不错。
lucene创建索引高级特性和索引创建参数优化 -
josico:
有几个问题想问下楼主1. LinkedBlockingQueu ...
生产者-消费者-BlockingQueue -
annybz:
有没有关于 BlockingQueue和ConcurrentL ...
生产者-消费者-BlockingQueue -
uniquejava:
多谢,记录的很真实。
DB2 学习记录
个人技术博客:http://demi-panda.com
发现现在几乎所有的网站都对url中的汉字和特殊的字符,进行了urlencode操作,也就是:
http://hi.baidu.com/%BE%B2%D0%C4%C0%CF%C8%CB/creat/blog/
这个样子,中间%形式的,肯定就是我的登录用户名称了吧。
为什么对这些字符进行了u的编码形式,是为了字符编码(gbk、utf8)还是为了不出现特殊的字符在url中?都知道要转,但是转了的真正好处呢。查看了网上的很多资料,也没有找到更加准确的说法。
url转义其实也只是为了符合url的规范而已。因为在标准的url规范中中文和很多的字符是不允许出现在url中的。
看一下php的urlencode的说明了。
urlencode — 编码 URL 字符串
返回字符串,此字符串中除了 -_. 之外的所有非字母数字字符都将被替换成百分号(% )后跟两位十六进制数,空格则编码为加号(+ )。此编码与 WWW 表单 POST 数据的编码方式是一样的,同时与 application/x-www-form-urlencoded 的媒体类型编码方式一样。由于历史原因,此编码在将空格编码为加号(+)方面与 RFC1738 编码(参见 rawurlencode() )不同。此函数便于将字符串编码并将其用于 URL 的请求部分,同时它还便于将变量传递给下一页。
标准的英文说明是:
"...Only alphanumerics [0-9a-zA-Z], the special characters "$-_.+!*'()," [not including the quotes - ed] , and reserved characters used for their reserved purposes may be used unencoded within a URL."
那哪些字符是需要转化的呢?
1. ASCII 的控制字符
这些字符都是不可打印的,自然需要进行转化。
2. 一些非ASCII字符
这些字符自然是非法的字符范围。转化也是理所当然的了。
3. 一些保留字符
很明显最常见的就是“&”了,这个如果出现在url中了,那你认为是url中的一个字符呢,还是特殊的参数分割用的呢?
4. 就是一些不安全的字符了。
例如:空格。为了防止引起歧义,需要被转化为“+”。
明白了这些,也就知道了为什么需要转化了,而转化的规则也是很简单的。
按照每个字符对应的字符编码,不是符合我们范围的,统统的转化为%的形式也就是了。自然也是16进制的形式。
和字符编码无关
通过urlencode的转化规则和目的,我们也很容易的看出,urleocode是基于字符编码的。同样的一个汉字,不同的编码类型,肯定对应不同的urleocode的串。gbk编码的有gbk的encode结果。
apache等服务器,接受到字符串后,可以进行decode,但是还是无法解决编码的问题。编码问题,还是需要靠约定或者字符编码的判断解决。
因此,urleocode只是为了url中一些非ascii字符,可以正确无误的被传输,至于使用哪种编码,就不是eocode所关心和解决的问题了。
编码问题,不是urlencode所要解决的。
再结合 Java API 写一个例子,帮助进一步理解:
import java.net.*;
public class TestURI
{
public static void main(String[] args) throws Exception
{
String path = args[0];
String query = args[1];
URI uri = new URI(
"http",
null,
"smartstorage.yoyoyws.com",
80,
path,
query,
null);
System.out.println("uri.toString(): " + uri.toString());
System.out.println("uri.toASCIIString(): " + uri.toASCIIString());
}
}
运行:
java TestURI "/a/b/文件 1.txt" "versionId=ver_1"
结果:
uri.toString(): http://smartstorage.yoyoyws.com:80/a/b/文件%201.txt?versionId=ver_1
uri.toASCIIString(): http://smartstorage.yoyoyws.com:80/a/b/%E6%96%87%E4%BB%B6%201.txt?versionId=ver_1
servlet 实现了 doGet:
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
{
System.out.println("getRequestURI: " + request.getRequestURI());
System.out.println("getParam: " + request.getParameter("param"));
}
发送请求:
http://localhost:8080/你好?param=你好
tomcat 打印(tomcat 配置 URIEncoding="UTF-8"):
getRequestURI: /%E4%BD%A0%E5%A5%BD
getParam: 你好
结论:
tomcat 对 URL 中的 paramater 部分自动做 url decode,而不会对 URL 中的 path 部分做 url decode,需要应用开发人员来自己做 decode。
我们用 Java 作为 client 发送 HTTP 请求时,应该按照上面例子中的写法(调用 toASCIIString() )构造请求的 URL
参考资料:
另外 JDK 中也有一段详细的介绍:
http://download.oracle.com/javase/6/docs/api/java/net/URI.html#encode
http://www.blooberry.com/indexdot/html/topics/urlencoding.htm
http://cn.php.net/manual/zh/function.urlencode.php
发表评论
-
Maven使用deploy命令部署构建
2012-07-18 17:13 2466个人技术博客:http:/ ... -
Java 对象序列化您不知道的 5 件事
2012-07-04 14:56 1448个人技术博客:http://demi-panda.com ... -
Solr 获取分词
2012-05-07 18:32 3580个人博客:http://demi-panda.com ... -
地图经纬度距离计算
2012-03-30 15:43 2409public static final doubl ... -
ThreadLocal类
2012-03-01 18:38 939个人技术博客:http://demi-panda.com ... -
解决 – java.lang.OutOfMemoryError: unable to create new native thread
2012-01-16 20:27 2765一、认识问题: 首先我们通过下面这个 测试程序 ... -
Spring MVC中默认的ResponseBody为String的乱码问题
2011-12-22 16:54 1422个人技术博客:http://demi-panda.com ... -
ASCII和中文互转
2011-07-29 13:34 3822个人技术博客:http://demi-panda.com ... -
JVM 参数详解
2011-07-06 14:23 6487个人技术博客:http://demi-panda.com ... -
笔记之三-robots
2011-06-16 16:13 1144一、robots robots主要作用是屏蔽一些不愿意让 ... -
HTTP协议头部与Keep-Alive模式详解
2011-06-16 15:55 17346个人技术博客:http://demi-panda.com ... -
java.net.SocketException: Too many open files解决方法
2011-03-24 15:34 1209Get current limit: ulimit - ... -
利用HAProxy实现负载均衡
2011-02-14 11:04 2490HAProxy的安装和部署 Posted o ... -
负载均衡工具haproxy安装,配置,使用
2011-02-12 11:28 3919一,什么是haproxy HAProxy提供高可 ... -
Java编程思想第四版 完整中文版下载
2011-01-09 21:11 4168个人技术博客:http://demi-panda.com ... -
Java 理论与实践: 正确使用 Volatile 变量
2011-01-06 23:45 489Java 语言中的 volatile ... -
Java常用正则表达式
2010-12-08 20:41 949"^\d+$" //非负整数(正整数 + ... -
JConsole远程连接
2010-12-02 13:58 1029JConsole很好用,可以解决很多疑难杂症。但远程连接需要设 ... -
JVM配置参数中文说明
2010-12-02 13:04 1229JVM配置参数中文说明: -------- ... -
Java 代理模式与动态代理类
2010-11-21 16:51 3560代理模式与Java 动态代理类 ...
相关推荐
为了解决这个问题,URL编码(URL encode)和解码(URL decode)机制应运而生。这个压缩包文件"URL encode 与 URL decode 的C语言实现.zip"显然提供了用C语言编写的函数,用于对URL进行编码和解码操作。 URL编码是一...
标题中的“java net unicode / native2ascii / url decode / url encode / UTF8 / js url code”涉及了Java网络编程中的几个关键概念,这些概念在处理字符编码时非常重要。以下是对这些概念的详细解释: 1. **...
在标题提到的“JavaScript的URL encode decode源代码,ip验证,TRim”中,我们将探讨这三个关键概念。 1. URL编码与解码: 在JavaScript中,我们经常需要对URL中的特殊字符进行编码,以确保它们在HTTP请求中被正确...
网址编码解码,jQuery版Url.encode,Url.decode,Url.parse,一个来自jQuery的URL Decoder解码、编码插件,为你的URL安全定义一道安全防线,示例文件本身就是一个值得学习的实例,自带的示例将告诉你如何使用这款URL...
hexencode 将字符串指定字符集进行编码成16进制字符串 hexstring 将字符串指定字符集进行编码成16进制字符串 power 求数字的幂函数 replace 将指定字符串中的源字符替换为目标字符 todec 将指定进制的数字转换成10...
使用这个库可以很方便的编码解码URLCode。里面带了ESP8266看门狗开关,可以在调用这个库之前宏定义ESP8266就可以开启库的看门狗设置。避免触发看门狗。建议配合我主页的教程一起食用。哪怕是小白也可以轻松使用。
C++的UrlEncode UrlDecode代码。
linux系统c++实现的url和base64编解码 在webserver中会使用 自己实现的一个webserver,详见https://download.csdn.net/download/k117470154/10234299
URL编码(URL Encode)是HTTP协议中处理特殊字符的一种方法。URL中不能包含某些字符,如空格、百分号等,因此需要将它们转换为 `%xy` 的形式,其中`xy`是字符的ASCII码的十六进制表示。例如,空格转换为 `%20`。在...
URL编码是一种用于处理URL中特殊字符的技术,确保它们能在互联网上安全传输。在C++中实现这一功能涉及到对字符串的遍历、字符识别以及ASCII码与十六进制之间的转换。 #### 核心概念解析 1. **数字和字母不变**:在...
`Encode_ Decode Tools`是一款用于URL编码和解码的工具,它可以帮助开发者和用户方便地处理这些编码问题。这款工具可能提供了简单的用户界面,允许用户输入URL或字符串,然后点击按钮进行编码或解码操作。它支持对...
在实际应用中,`urlEncode`和`urlDecode`常用于构建和解析URL,特别是当URL中包含查询字符串时。例如,如果你要创建一个指向搜索引擎的链接,查询参数可能包含用户输入的数据,这些数据必须先编码再加入到URL中,以...
自己动手写了一个HTML码URL-encode码转换器,给大家分享一下。
在Laravel框架中,开发过程中可能会遇到需要处理URL编码的问题,特别是当路由参数包含特殊字符,如斜杠(/)时。`urlencode`函数在PHP中广泛用于将URL中的非字母数字字符转换为对应的百分号编码,以确保它们在HTTP...
- **方法二**:在客户端对URL进行两次`URL encode`,服务器端进行一次`URL decode`。 #### 三、实践案例 以字符串“京AS8095”为例: - 客户端进行第一次`URL encode`:`%E4%BA%ACAS8095` - 客户端进行第二次`...
除了HtmlEncode与HtmlDecode外,文中还提到了`UrlEncode`和`UrlDecode`的概念。这两个操作主要用于处理URL中的特殊字符,确保URL能够被正确解析并传输。 **UrlEncode**的目的是将URL中的特殊字符转换为对应的百分比...
【渝海URL编码转换工具 v1.1_yh_url_encode】是一个专用于处理URL编码问题的实用工具。在互联网通信中,URL(统一资源定位符)是用于标识资源的字符串,它包含网络协议、主机名、路径、查询参数等部分。然而,URL中...
在Web开发中,URL编码(URL Encode)和URL解码(URL Decode)是处理字符串以确保它们能在URL中安全传输的重要操作。本文将深入探讨一个JavaScript版本的URL编码和解码函数实现,并分析其工作原理及应用场景。 #### 一、...
Nginx服务器支持中文URL的配置方法主要涉及服务器的字符集设置、Web服务器软件的配置以及客户端工具的字符集设置。在了解配置方法之前,先要了解为什么会有这样的需求以及中文URL的支持度问题。 SEO(搜索引擎优化...