`
石头的日记
  • 浏览: 199175 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类

URL中对提交参数的编码

阅读更多

ava.net中有URLEncoder类,但是它对参数中的所有字符都进行编码,有时是不需要的。

public class URLUTF8Encoder
{

  final static String[] hex = {
    "%00", "%01", "%02", "%03", "%04", "%05", "%06", "%07",
    "%08", "%09", "%0a", "%0b", "%0c", "%0d", "%0e", "%0f",
    "%10", "%11", "%12", "%13", "%14", "%15", "%16", "%17",
    "%18", "%19", "%1a", "%1b", "%1c", "%1d", "%1e", "%1f",
    "%20", "%21", "%22", "%23", "%24", "%25", "%26", "%27",
    "%28", "%29", "%2a", "%2b", "%2c", "%2d", "%2e", "%2f",
    "%30", "%31", "%32", "%33", "%34", "%35", "%36", "%37",
    "%38", "%39", "%3a", "%3b", "%3c", "%3d", "%3e", "%3f",
    "%40", "%41", "%42", "%43", "%44", "%45", "%46", "%47",
    "%48", "%49", "%4a", "%4b", "%4c", "%4d", "%4e", "%4f",
    "%50", "%51", "%52", "%53", "%54", "%55", "%56", "%57",
    "%58", "%59", "%5a", "%5b", "%5c", "%5d", "%5e", "%5f",
    "%60", "%61", "%62", "%63", "%64", "%65", "%66", "%67",
    "%68", "%69", "%6a", "%6b", "%6c", "%6d", "%6e", "%6f",
    "%70", "%71", "%72", "%73", "%74", "%75", "%76", "%77",
    "%78", "%79", "%7a", "%7b", "%7c", "%7d", "%7e", "%7f",
    "%80", "%81", "%82", "%83", "%84", "%85", "%86", "%87",
    "%88", "%89", "%8a", "%8b", "%8c", "%8d", "%8e", "%8f",
    "%90", "%91", "%92", "%93", "%94", "%95", "%96", "%97",
    "%98", "%99", "%9a", "%9b", "%9c", "%9d", "%9e", "%9f",
    "%a0", "%a1", "%a2", "%a3", "%a4", "%a5", "%a6", "%a7",
    "%a8", "%a9", "%aa", "%ab", "%ac", "%ad", "%ae", "%af",
    "%b0", "%b1", "%b2", "%b3", "%b4", "%b5", "%b6", "%b7",
    "%b8", "%b9", "%ba", "%bb", "%bc", "%bd", "%be", "%bf",
    "%c0", "%c1", "%c2", "%c3", "%c4", "%c5", "%c6", "%c7",
    "%c8", "%c9", "%ca", "%cb", "%cc", "%cd", "%ce", "%cf",
    "%d0", "%d1", "%d2", "%d3", "%d4", "%d5", "%d6", "%d7",
    "%d8", "%d9", "%da", "%db", "%dc", "%dd", "%de", "%df",
    "%e0", "%e1", "%e2", "%e3", "%e4", "%e5", "%e6", "%e7",
    "%e8", "%e9", "%ea", "%eb", "%ec", "%ed", "%ee", "%ef",
    "%f0", "%f1", "%f2", "%f3", "%f4", "%f5", "%f6", "%f7",
    "%f8", "%f9", "%fa", "%fb", "%fc", "%fd", "%fe", "%ff"
  };
  public static String encode(String s)
  {
    StringBuffer sbuf = new StringBuffer();
    int len = s.length();
    for (int i = 0; i < len; i++) {
      int ch = s.charAt(i);
      if ('A' <= ch && ch <= 'Z') {  // 'A'..'Z'
        sbuf.append((char)ch);
      } else if ('a' <= ch && ch <= 'z') { // 'a'..'z'
        sbuf.append((char)ch);
      } else if ('0' <= ch && ch <= '9') { // '0'..'9'
        sbuf.append((char)ch);
      } else if (ch == ' ') {   // space
        sbuf.append('+');
      } else if (ch == '-' || ch == '_'  // unreserved
          || ch == '.' || ch == '!'
          || ch == '~' || ch == '*'
          || ch == '\'' || ch == '('
          || ch == ')') {
        sbuf.append((char)ch);
      } else if (ch <= 0x007f) {  // other ASCII
        sbuf.append(hex[ch]);
      } else if (ch <= 0x07FF) {  // non-ASCII <= 0x7FF
        sbuf.append(hex[0xc0 | (ch >> 6)]);
        sbuf.append(hex[0x80 | (ch & 0x3F)]);
      } else {     // 0x7FF < ch <= 0xFFFF
        sbuf.append(hex[0xe0 | (ch >> 12)]);
        sbuf.append(hex[0x80 | ((ch >> 6) & 0x3F)]);
        sbuf.append(hex[0x80 | (ch & 0x3F)]);
      }
    }
    return sbuf.toString();
  }

}

 

对比:

String param = "Panorama Mundial (CNN en Español)";

String s1 = java.net.URLEncoder.encode(param,"utf-8");

String s2 = URLUTF8Encoder.encode(param);

 

s1:  Panorama+Mundial+%28CNN+en+Espa%C3%B1ol%29

s2: Panorama+Mundial+(CNN+en+Espa%c3%b1ol)

 

分享到:
评论

相关推荐

    jsp中URL传递中文参数的处理方法

    在页面的url中使用encodeURI(encodeURI(中文)),对中文进行编码,并在服务器的java程序中使用URLDecoder.decode(中文, “UTF-8”)进行解码即可; 如果url中需要传递+、#、?等特殊符号,可以使用encodeURIComponent...

    用js进行url编码后用php反解以及用php实现js的escape功能函数总结

    smarty可以直接对url进行编码, 比如&lt;... 解决办法: 采用js对URL中的汉字进行escape编码。 &lt;a&gt; 这样点击链接后的效时: 引用:http://127.0.0.1/shop/product_list.php?p_sort=PHP%u5F00%u53D1%u8D44%u6E90%u7

    浅谈在js传递参数中含加号(+)的处理方式

    如果希望有短一点的方式对参数编码,可以采用 base64 编码方式对字符串进行编码,但是 base64 编码方式不能处理 JavaScript 中的中文,因为 JavaScript 中的中文都是以 UTF-16 方式保存的。 而 base64 只能处理单...

    whatwg-url:WHATWG URL标准在JavaScript中的实现

    也就是说,我们的API中不存在编码覆盖参数。 原料药 URL和URLSearchParams类 和导出提供了主要的API,它以各种方式(包括例如USVString转换)遵循规范的行为。 该库的大多数使用者都想使用这些。 低级URL标准API ...

    精易模块V7.5.5源码

    3、新增“编码_URL编码_局部”,快速编码提交数据参数;。4、新增“编码_URL解码_局部”,对应“编码_URL编码_局部”编码的数据解码;。5、新增“编码_UTF8编码”,支持宽字节或窄字节UTF8编码;。6、新增“编码_UTF...

    Url Editor PRO-crx插件

    功能: * Parse URL并易于浏览字段的块 *自动或手动重定向 *自动刷新 *手动和自动URL编码/解码参数 * Base64 Params编码/解码 *自动建议功能 *建议经理(在选项页面上) *排序参数(易于找到您正在寻找的参数) *...

    GET 方式提交的含有特殊字符的参数

    如我在连接&lt;a&gt;A&T Plastic,在接受参数的时候就没办法读取name参数的正确值,怎么样才能正确读取,还有其他的特殊字符 字符 特殊字符的含义 URL编码 # 用来标志特定的文档位置 # % 对特殊字符进行编码 % & 分隔不同...

    Android编程向服务器发送请求时出现中文乱码问题的解决方法

    1、 在提交参数时,没有对中文参数进行URL编码 2、 Tomcat服务器默认采用的是IOS8859-1编码(不支持中文)得到参数值 解决: 1、 进入android项目,在其中要提交参数的时候,对参数的值进行编码: 代码如下:...

    网址编辑器PRO「Url Editor PRO」-crx插件

    *手动和自动的url编码/解码参数 * Base64 params编码/解码 *自动建议功能 *建议管理器(在选项页面上) *排序参数(很容易找到你正在寻找的) *所有主要操作的键盘快捷键 *在当前/新标签或新窗口打开提交的网址 *...

    易语言-精易模块V7.5.5

    3、新增“编码_URL编码_局部”,快速编码提交数据参数;4、新增“编码_URL解码_局部”,对应“编码_URL编码_局部”编码的数据解码;5、新增“编码_UTF8编码”,支持宽字节或窄字节UTF8编码;6、新增“编码_UTF8解码...

    JSP中文乱码问题综述,中文乱码解决大全

    JSP中文乱码问题综述,中文乱码解决大全,表单使用Post方式提交后接收到的乱码问题,表单get提交方式的乱码处理方式,上传文件时的乱码解决,Java代码关于url请求,接受参数的乱码,关于jsp在MyEclipse中打开的乱码问题,...

    易语言 e秒百科模块

    参数 Url, 文本型, , 提交的网站Url.action后面的地址.需要补全 .参数 Referer地址, 文本型, , Referer地址 .参数 Cookie信息, 文本型, , Cookie信息 .参数 提交数据, 文本型, , 提交到网站的数据 .子程序 PostXml...

    富头像上传编辑器演示

    v1.8:将追加到上传接口url后的参数的提交方式更改为POST,避免参数中含有特殊字符(如base64中的+号)时产生错误。如果之前的版本中有传递额外的参数到上传接口的,更新此版本后请自行修改接口文件中获取参数的方式...

    IE中jquery.form中ajax提交没反应解决方法分享

    花了三个钟头,反复查,发现,原来是改了处理页面的返回头信息。 加上了 application/x-... ajax提交表单数据的方式介绍 Url参数提交数 代码如下: [removed][removed] [removed] function checkCorpID()//检测客户

    c#支付宝标准双接口实现

    功能:把数组所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串,并对参数值做urlencode 输入:Dictionary, string&gt; dicArray 需要拼接的数组 Encoding code 字符编码 输出:string 拼接完成以后的字符...

    ORACLE,mysql,sqlserver,sybase数据库装文本软件

    自己写的数据库装载工具,平时工作中用于装载大文本文件到数据库表,也能直接装载excel,不过excel只能使用第一个sheet,且不支持合并的单元格。 jdk要求版本1.6及以上。 使用方法: java -jar lynload.jar,即可看到...

    java-servlet-api.doc

    当客户端发出请求时,Servlet引擎传递给Servlet一个ServletRequest对象和一个ServletResponse对象,这两个对象作为参数传递到service()方法中。 Servlet也可以执行ServletRequest接口和ServletResponse接口。...

    微信开发调试小工具 v1.0.zip

    1.请求网址 请求网址输入你在公众平台开发模式下的那个URL(如下图),这个工具不带有验签算法之类的,所以不用填写Token了,但是在WEB程序中为了安全我们是需要验签的,因此,你要加上只有你知道的参数比如debug=...

    FlashFXP(免注册)

    • 改进了从 Adobe Reader 或其它程序中复制 ftp:// 类型的 URL 时对剪贴板的监视处理 • 改进了当处理服务器脱机错误消息时的 PRET 支持 (drftpd) 修正 • 某种情况下, 用户初次断开与站点的连接会触发自动重新...

Global site tag (gtag.js) - Google Analytics