http url转义字符,特殊字符

空格 - %20

" - %22

# - %23

% - %25

& - %26

( - %28

) - %29

+ - %2B

, - %2C

/ - %2F

: - %3A

; - %3B

< - %3C

= - %3D

> - %3E

? - %3F

@ - %40

\ - %5C

| - %7C 



URL中传递加号等特殊字符

url 中有些字符被转义,比如空格被编码成加号,于是传的参数明明是加号,获取的值却成了空格。如何解决呢?如果是通过 url 传递参数,应该对其进行必要的编码。 


解决办法:


在 javascript 中加入    

  function URLencode(sStr) { return escape(sStr).replace(/\+/g, '%2B').replace(/\"/g,'%22').replace(/\'/g, '%27').replace(/\//g,'%2F'); }



对字符串进行处理.如:

  var str=URLencode("abc+");


或者:

  dst_fname=dst_fname.replaceAll("\\+","%20");

关于http的RFC文档:http://www.w3.org/Protocols/rfc2616/rfc2616.html

关于http与中文传输的问题,如果不解决,在实际的网络抓取的过程中会产生很多的次生的问题。理解中文传输的编码过程因而尤为重要。


中文的传输过程具体可能是:内存中unicode -> 编码阶段gbk, gb18030, utf8 -> 到urlencode ->最后到可能的base64编码。那到底是什么机制在负责这个转换的过程呢?转换使用的是什么通道呢?

UrlEncode:将字符串以URL编码 。  返回值:字符串。 函数种类:编码处理。比如在谷歌搜索“中国人”的时候,得到的URL如下所示:http://www.google.com.hk/search?q=%D6%D0%B9%FA%C8%CB&client=aff-360daohang&hl=zh-CN&ie=gb2312&newwindow=1,其中%D6%D0%B9%FA%C8%CB部分就是urlencode。那么这个编码的处理方式是怎么样的呢?有没有什么处理工具?




个人尝试的方法就是:

无论如何都把urlencode转化成Utf-8的格式进行数据传输。例如下例:id=java.net.URLEncoder.encode(id, "utf-8");

然后再接受就可以了。urlencoder时必须合并使用的方法。

id=java.net.URLEncoder.encode(id, "utf-8");

response.sendRedirect("personalPage.jsp?user="+id);


尝试成功之后,还有一种情况没有考虑到,那就是gb2312编码格式下中文字符的直接传输。能否不经过utf-8的编码来搞定参数的传递?



附一些自己找到的资料:


UrlEncode编码


主要用于将字符串以URL编码,返回一个字符串。

使用方法:

1、ASP中的用法:Server.URLEncode(“内容”) 例如:

   <% response.write Server.UrlEncode("工具网") %>

2、PHP中的用法:urlencode(“内容”) 例如:

   <?  echo urlencode("工具网")?>

3、JSP中的用法:URLEncoder.encode(“内容”) 例如:

   <% java.net.URLEncoder.encode("工具网");  %>

   个人亲自尝试的中文传输方法,即只需编码,另一端无需解码:

<%

    id=java.net.URLEncoder.encode(id, "UTF-8");

   response.sendRedirect("/index.jsp?error="+id); 

%>

4、javascript中的用法:encodeURI(“内容”) 例如:

   encodeURI("工具网");

5、Python中的用法:

   import urllib2

   urllib2.quote("工具网")

UrlDecode解码

主要对字符串进行URL解码,返回已解码的字符串

1、ASP中的用法:Server.UrlDecode(“内容”) 例如:

   <% response.write Server.UrlDecode("%E5%B7%A5%E5%85%B7%E7%BD%91") %>

2、PHP中的用法:urldecode(“内容”) 例如:

   <? echo urldecode("%E5%B7%A5%E5%85%B7%E7%BD%91")?>

3、JSP中的用法:URLDecoder.decode(“内容”) 例如:

   <% java.net.URLDecoder.decode("%E5%B7%A5%E5%85%B7%E7%BD%91"); %>

4、javascript中的用法 例如:

   decodeURI("%E5%B7%A5%E5%85%B7%E7%BD%91");

5、Python中的用法 例如:

   import urllib2

   urllib2.unquote("%E5%B7%A5%E5%85%B7%E7%BD%91")

Gb2312及Gb2312转Utf-8编码的UrlEncode编码解码

Unicode 与 Utf-8码间的内码规则模板为:

    原始码(16进制) UTF-8编码(二进制)

    --------------------------------------------

    0000 - 007F       0xxxxxxx 

    0080 - 07FF       110xxxxx 10xxxxxx 

    0800 - FFFF       1110xxxx 10xxxxxx 10xxxxxx   (中文字在此区间)

    ……

    --------------------------------------------

例如:

百度中查询“中国人”,会将中文URL参数转为Gb2312码的16进制表示,一个中文字用2个字节

http://www.baidu.com/s?wd=%D6%D0%B9%FA%C8%CB

Google中查询“中国人”,会将中文URL参数转为Utf-8编码的16进制表示,一个中文字用3个字节

http://www.google.cn/search?client=opera&rls=en&q=%E4%B8%AD%E5%9B%BD%E4%BA%BA&sourceid=opera&ie=utf-8&oe=utf-8

Objective-C 对 URL 进行 URLEncode 编码

在为Apple的IPhone、ipad等设备开发iOS app应用程序访问 HTTP 资源时需要对 URL 进行 Encode,比如像拼出来的 http://www.baidu.com/s?wd=中国人,其中的中国人、 特殊符号&%和空格都必须进行转译才能正确访问。

在 Java、.net 和 JS 中都有相应的 encodeURL 方法可用,在 Objective-C 语言中,你可以试下

   - (NSString *)stringByAddingPercentEscapesUsingEncoding:(NSStringEncoding)enc;  

来对完整的 URL(带请求参数的)进行编码,比如执行下面的代码:

   NSString *url=@"http://www.baidu.com/s?wd=中国人";

   NSString *encodedValue = [url stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

上面代码转换出的 encodedValue 是:

    http://www.baidu.com/s?wd=%D6%D0%B9%FA%C8%CB

可见,它不会转换 URL 中的 ?%& 符号,这也正常,因为它肯定分不出哪个 & 是参数的连接符号还是参数值,你可以单独编码参数,然后在拼接成 URL 之前把属性参数值中的 ?%& 等符号分别替换成相应的编码。

base64的编码方式:

Base64 c#加密函数 

C#代码  

  1. public static string Encrypt(string pToEncrypt)  
  2.       {  
  3.                       byte[] barray=System.Text.UnicodeEncoding.Unicode.GetBytes(pToEncrypt);  
  4.   
  5.           return Convert.ToBase64String(barray);  
  6.       }  


Base64 c#解密函数 


C#代码  

  1. public string Decrypt(string pToDecrypt)  
  2.       {  
  3.   
  4.           byte[] mingwen = Convert.FromBase64String(pToDecrypt);  
  5.   
  6.           string str = System.Text.UnicodeEncoding.Unicode.GetString(mingwen);  
  7.   
  8.           return str;  
  9.   
  10.       }    



加密后的字符串如果存在"/" "+" "=", 在WEB的传输过程中(含有request之类动作)会发生改变,分别对应为 

“/” 在客户端变为 "2F" 

"+"  ..........." " 

"="  ..........."%3D" 

所以在客户端对字符串解密前应该恢复为正确的base64码,下面是asp中的编码 

  

Java代码  

  1. str=Replace(str," ","+")  
  2. str=Replace(str,"%2F","/")  
  3. str=Replace(str,"%3D","=")  








你可能感兴趣的:(http url转义字符,特殊字符)