Http url特殊字符转义

来源:互联网 发布:公共网络怎么改成家庭 编辑:程序博客网 时间:2024/05/20 17:40


原文地址:http://zctya.blog.163.com/blog/static/1209178201242914357634/

  1. URL特殊字符需转义   
  2.  
  3. 1、空格换成加号(+)   
  4. 2、正斜杠(/)分隔目录和子目录   
  5. 3、问号(?)分隔URL和查询   
  6. 4、百分号(%)制定特殊字符   
  7. 5、#号指定书签   
  8. 6、&号分隔参数  

    转义字符的原因: 

    如果你的表单使用get方法提交,并且提交的参数中有“&”等特殊符的话,如果不做处理,在service端就会将&后面的作为另外一个参数来看待。例如 
    表单的action为list.jsf?act=go&state=5 
    则提交时通过request.getParameter可以分别取得act和state的值。 
    如果你的本意是act='go&state=5'这个字符串,那么为了在服务端拿到act的准确值,你必须对&进行转义 

    url转义字符原理: 

    将这些特殊的字符转换成ASCII码,格式为:%加字符的ASCII码,即一个百分号%,后面跟对应字符的ASCII(16进制)码值。例如 空格的编码值是"%20"。 
     

    1. URL特殊符号及对应的十六进制值编码:   
    2.  
    3. 1. +  URL 中+号表示空格 %2B   
    4. 2. 空格 URL中的空格可以用+号或者编码 %20   
    5. 3. /  分隔目录和子目录 %2F    
    6. 4. ?  分隔实际的 URL 和参数 %3F    
    7. 5. % 指定特殊字符 %25    
    8. 6. # 表示书签 %23    
    9. 7. & URL 中指定的参数间的分隔符 %26    
    10. 8. = URL 中指定参数的值 %3D  

    解决方法如下(以+号为例):

    方法一、修改客户端,将客户端带“+”的参数中的“+”全部替换为?“%2B”,这样参数传到服务器端时就能得到“+”了。

    方法二、修改服务器端,将空格替换为“+”,这种方式只适用于参数中有?“+”没有空格的情况。

    例子:

    1. String a = reuqest.getParameter("clientStr")?.replace(' ','+'); 

    如果客户端为clientStr=test+OK,那么a的值为test+OK;

     

    方法三、修改服务器端,将获取参数的方法由?reuqest.getParameter改为?request.getQueryString().substring(0),然后对得到的字符串进行解析。

    例子:

    1. String a =request.getQueryString().substring(0); 

    ?如果客户端为clientStr=test+OK,那么a的值为?clientStr=test+OK,需要再解析一下,

    a=a.?substring(10);得到a的值为?test+OK。

     

    附:一个JS,用来转义URL中特殊字符的。

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

     

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

       

package com.zctya.url;import java.io.BufferedReader;import java.io.DataOutputStream;import java.io.InputStreamReader;import java.net.HttpURLConnection;import java.net.URL;import java.net.URLEncoder;public class Test { /** * @param args */ public static void main(String[] args) { URL url; HttpURLConnection connection = null; DataOutputStream wr = null; BufferedReader br = null; try { url = new URL("http://127.0.0.1:8080/url/index.jsp"); connection = (HttpURLConnection)url.openConnection(); connection.setDoInput(true); connection.setDoOutput(true); connection.setUseCaches(false); connection.setRequestMethod("POST"); connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8"); connection.setInstanceFollowRedirects(true); connection.setConnectTimeout(8000); wr = new DataOutputStream (connection.getOutputStream ()); String data = "a+b"; StringBuffer params = new StringBuffer(); params.append("str=").append(URLEncoder.encode(data,"utf-8")); String str = params.toString(); wr.write(str.getBytes()); wr.flush(); wr.close(); br = new BufferedReader(new InputStreamReader(connection.getInputStream(),"UTF-8")); String line; params = new StringBuffer(); while((line=br.readLine())!=null){ params.append(line); } System.err.println("结果:"+params.toString()); connection.disconnect(); br.close(); }catch(Exception e) { e.printStackTrace(); }finally { if(wr!=null)try{wr.close();}catch(Exception e){} if(br!=null)try{wr.close();}catch(Exception e){} if(connection!=null)connection.disconnect(); } }}


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 驾照被扣54分怎么办? 驾照被扣了12分怎么办 驾驶证丢失后被扣分怎么办 驾照扣了三十分怎么办 一次被扣了12分怎么办 驾照被扣35分后怎么办 我驾驶证扣了6分怎么办 c1驾照被扣6分怎么办 被扣了6分怎么办 今年扣了6分怎么办 驾照分不够扣了怎么办 被扣6分怎么办罚款15 驾照分数扣36分怎么办 驾照12分不够扣怎么办 驾照b证扣分了怎么办 违章18分不够扣怎么办 b2驾驶证扣11分怎么办 驾照一共扣30分怎么办 驾照扣了100分怎么办 驾照扣40多分怎么办 驾照被扣69分怎么办 驾照被扣200多分怎么办 b2驾照扣了分怎么办 驾驶证在外地被冒用怎么办 身份证被冒用办驾照怎么办 外国人在中国境内死了怎么办 台风来临时航船应该怎么办 越南攻占太平岛台湾怎么办 厨房下水pvc管三通漏水怎么办 pvc下水管道接口漏水怎么办 马航机场转机行李怎么办 习惯了光脚开车怎么办 遇到暴恐分子时该怎么办视频 中国人在菲律宾失踪了怎么办 高跟凉鞋前面磨脚怎么办 小孩子偷邻居家的钱怎么办 碰见美国人说叙利亚诈骗团伙怎么办 日服的火焰纹章闪退怎么办 冒险岛没潜能的怎么办 冒险岛法师运气不够怎么办 cad文件打开老是闪退白屏怎么办