urlencode
在1994年订立的RFC1738中。对字符串中除了-_.三个字符之外的所有非字母数字字符都替换成百分号(%)后跟两位十六进制数。十六进制数中字母必须为大写。
http://tools.ietf.org/html/rfc1738
在2005年定义的RFC3986中,将针对- _.~(扩充了一个波浪线字符)四个字符之外的所有非字母数字字符进行百分号编码。
http中的urlencode
在W3C找到HTML标准的说明 http://www.w3.org/TR/REC-html40/interact/forms.html#h-17.13.4
在这里清楚的看到编码方式是根据ContextType的不同而区别对待的,在form的ContextType是[x-www-form-urlencoded]的时候会对form中的键/值对进行编码,空格被转义成+,其他字符按照[RFC1738]标准处理成%HH的形式。
编程语言中urlencode的实现
java
java中的UrlEncode是实现http协议form表单的标准,因此把空格转换成+,而没有提供类似php中rawurlencode的实现(RFC1738标准)
php
在php当中也提供了标准的RFC1738的实现
在PHP Manual中有对两个函数的说明:
urlencode</