application/x-www-form-urlencoded 标准编码

在文本应用程序中,   从客户端到服务器端数据传输编码标准是application/x-www-form-urlencoded    这种数据的基本形式是采用"&"分割开的key/value例如:   name1=value1&name2=value2&name3=value3&.....&nameN=valueN

 

其中每一个key和value均按照如下规则进行编码:

  1. 用"+"取代空字符
  2. 非数字,  字母用%HH格式进行替换,  其中HH是两位16进制数字,  表示被替换字符的ASCII码(例如"?"会被替换成"%3F", 对应十进制数是63,  也就是问号对应的ASCII值)
  3. 换行符用CR LF字符对表示, 对应的值是"%0D%0A";

 

form提交的数据默认使用的就是application/x-www-form-urlencoded,   所以无需关系编码,   当使用ajax组织数据时, 需要用户执行必要的转换

  1. encodeURIComponent()方法.   在一些旧版本的javascript中这个方法是不可用的并且需要依赖于escape()方法, 
  2. escape()方法不会对一些浏览器需要的字符进行编码这里面包括"@", "/"和"+", 已经不推荐使用,  可以作为后备
  3. encodeURIComponent()对一些字符不进行转义: "~"  "!" "." "'" "(" ")"
  4. escape()和encodeURIComponent()都将空白字符编码为%20而不是"+"
  5. 综合以上得出一个比较合理的转换函数,  不依赖浏览器产生符合规范的编码
     1 function encodeValue(val)
     2 {
     3  var encodedVal;
     4  if (!encodeURIComponent)
     5  {
     6    encodedVal = escape(val);
     7    /* fix the omissions */
     8    encodedVal = encodedVal.replace(/@/g, '%40');
     9    encodedVal = encodedVal.replace(/\//g, '%2F');
    10    encodedVal = encodedVal.replace(/\+/g, '%2B');
    11  }
    12  else
    13  {
    14    encodedVal = encodeURIComponent(val);
    15    /* fix the omissions */
    16    encodedVal = encodedVal.replace(/~/g, '%7E');
    17    encodedVal = encodedVal.replace(/!/g, '%21');
    18    encodedVal = encodedVal.replace(/\(/g, '%28');
    19    encodedVal = encodedVal.replace(/\)/g, '%29');
    20    encodedVal = encodedVal.replace(/'/g, '%27');
    21  }
    22  /* clean up the spaces and return */
    23  return encodedVal.replace(/\%20/g,'+'); 
    24 }
    View Code

     

参考:  http://ajaxref.com/ch2/imagegenerator.html

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURI?redirectlocale=en-US&redirectslug=JavaScript%2FReference%2FGlobal_Objects%2FencodeURI

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2013-11-05 12:03  我的百科全书  阅读(4136)  评论(0编辑  收藏  举报