如何判断某String是否经过urlEncoder.encode过
- import java.util.BitSet;
- public class UrlEncoderUtils {
- private static BitSet dontNeedEncoding;
- static {
- dontNeedEncoding = new BitSet(256);
- int i;
- for (i = 'a'; i <= 'z'; i++) {
- dontNeedEncoding.set(i);
- }
- for (i = 'A'; i <= 'Z'; i++) {
- dontNeedEncoding.set(i);
- }
- for (i = '0'; i <= '9'; i++) {
- dontNeedEncoding.set(i);
- }
- dontNeedEncoding.set('+');
- /**
- * 这里会有误差,比如输入一个字符串 123+456,它到底是原文就是123+456还是123 456做了urlEncode后的内容呢?<br>
- * 其实问题是一样的,比如遇到123%2B456,它到底是原文即使如此,还是123+456 urlEncode后的呢? <br>
- * 在这里,我认为只要符合urlEncode规范的,就当作已经urlEncode过了<br>
- * 毕竟这个方法的初衷就是判断string是否urlEncode过<br>
- */
- dontNeedEncoding.set('-');
- dontNeedEncoding.set('_');
- dontNeedEncoding.set('.');
- dontNeedEncoding.set('*');
- }
- /**
- * 判断str是否urlEncoder.encode过<br>
- * 经常遇到这样的情况,拿到一个URL,但是搞不清楚到底要不要encode.<Br>
- * 不做encode吧,担心出错,做encode吧,又怕重复了<Br>
- *
- * @param str
- * @return
- */
- public static boolean hasUrlEncoded(String str) {
- /**
- * 支持JAVA的URLEncoder.encode出来的string做判断。 即: 将' '转成'+' <br>
- * 0-9a-zA-Z保留 <br>
- * '-','_','.','*'保留 <br>
- * 其他字符转成%XX的格式,X是16进制的大写字符,范围是[0-9A-F]
- */
- boolean needEncode = false;
- for (int i = 0; i < str.length(); i++) {
- char c = str.charAt(i);
- if (dontNeedEncoding.get((int) c)) {
- continue;
- }
- if (c == '%' && (i + 2) < str.length()) {
- // 判断是否符合urlEncode规范
- char c1 = str.charAt(++i);
- char c2 = str.charAt(++i);
- if (isDigit16Char(c1) && isDigit16Char(c2)) {
- continue;
- }
- }
- // 其他字符,肯定需要urlEncode
- needEncode = true;
- break;
- }
- return !needEncode;
- }
- /**
- * 判断c是否是16进制的字符
- *
- * @param c
- * @return
- */
- private static boolean isDigit16Char(char c) {
- return (c >= '0' && c <= '9') || (c >= 'A' && c <= 'F');
- }
- }
如何判断某String是否经过urlEncoder.encode过的更多相关文章
- URLEncoder.encode 和 URLDecoder.decode 处理url的特殊参数
在使用 url 的 queryString 传递参数时,因为参数的值,被DES加密了,而加密得到的是 Base64的编码字符串,类似于: za4T8MHB/6mhmYgXB7IntyyOUL7Cl++ ...
- 关于 web中 使用 java.net.URLEncoder.encode 要编码两次呢 , js的encodeURIComponent 同理
因为在jsp中对中文进行了编码的时候用的是UTF-8的编码方式,而在servlet中调用request.getParameter();方法的时候使用服务器指定的原始编码格式(ISO-8859-1)自动 ...
- URLEncoder.encode问题
遇到java里的URLEncoder.encode方法编码后与javascript的encodeURIComponent方法的结果有点不一样,找了一下资料,原来URLEncoder实现的是HTML形式 ...
- java中的URLEncoder.encode对应JS中用decodeURIComponent,js和java编码,解码
用get请求传中文,经常搞到乱码,这几天搞搞这个东西,总结一下,以方便以后处理这类的问题. Java代码中的URLEncoder.encode方法和JS的encodeURIComponent功能差不多 ...
- javaWeb中URLEncoder.encode编码需要调用两次
今天碰到一个问题,在Controller类中一个方法跳转到该类中的另一个方法,带着中文参数,在跳转之前对该参数进行编码: msg = java.net.URLEncoder.encode(msg,&q ...
- 为什么java的web开发中URLEncoder.encode方法要为什么要调用两次
一: 我们先看2个编码的情况 String name=java.net.URLEncoder.encode("测试", "UTF-8"); System.out ...
- URLEncoder.encode 使用心得
1.解决接口GET请求中:参数包含中文问题? 通过URLEncoder.encode 可以解决.我此次使用的utf-8编码,所以对中文进行urlencode 编码 而在服务器短 使用的tomcat ...
- 中文乱码在java中URLEncoder.encode方法要调用两次解决
中文乱码在java中URLEncoder.encode方法要调用两次解决 一.场景: 1.我在客户端要通过get方式调用服务器端的url,将中文参数做utf-8编码,需要在js中两次的进行编码,服务器 ...
- HttpPost过程中使用的URLEncoder.encode(something, encode)
URLEncoder.encode("刘美美", "utf-8").toString() = %E5%88%98%E7%BE%8E%E7%B ...
随机推荐
- C#反射Assembly 详细说明,有项目例子
1.对C#反射机制的理解2.概念理解后,必须找到方法去完成,给出管理的主要语法3.最终给出实用的例子,反射出来dll中的方法 反射是一个程序集发现及运行的过程,通过反射可以得到*.exe或*.dll等 ...
- SSH框架-Struts2基础-Action
Struts2的目录结构: 解压apps目录下的struts2-blank.war: 仿照这个最基本的项目,拷贝相关文件: 1.拷贝apps/struts2-blank/WEB-INF/classes ...
- 【BZOJ】2018: [Usaco2009 Nov]农场技艺大赛(暴力)
http://www.lydsy.com/JudgeOnline/problem.php?id=2018 精度问题我也是醉了.. #include <cstdio> #include &l ...
- VC中怎么输入特殊符号(如平方、立方等下标符号)
同在列表控件里显示汉字一样,直接把输入法里特殊字符放进一个数组里,然后再赋值:CString F[]={"m²","∑","±"," ...
- 蓝桥杯 第四届C/C++预赛真题(5) 前缀判断(水题)
题目标题:前缀判断 如下的代码判断 needle_start指向的串是否为haystack_start指向的串的前缀,如不是,则返回NULL. 比如:"abcd1234" 就包含了 ...
- 理解PHP中会话控制
如果以前没有接触过建站或网络编程,只是从头开始学PHP,以及用PHP来建立动态站点,那么会话(SESSION)对于初学者就有点难理解.那么到底什么是会话呢?理解一个概念需要从它产生的背景或问题出发,所 ...
- Direct Line Guidance Odometry论文阅读笔记
摘要: 本文特色:使用线引导关键点的选择.本文提出这个的论点是:线上的点比图像的其他部分的点更好,而且线上存在更好的关键点.选择线上的点可以筛选过滤掉不太明显的点,从而提高效率. 点和线: 系统使用点 ...
- 巨蟒python全栈开发-第11天 第一类对象 闭包 迭代器
一.今日主要内容总览(重点) 1.第一类对象->函数名=>变量名 (1)函数对象可以像变量一样进行赋值 (2)还可以作为列表的元素进行使用 (3)还可以作为返回值返回 (4)还可以作为参数 ...
- 转!!springmvc学习
springmvc学习 https://www.cnblogs.com/baiduligang/p/4247164.html
- 转!!Tomcat网站上的core和deployer的区别
转自:https://www.cnblogs.com/guxia/p/6678184.html 8.5.13 Please see the README file for packaging info ...