开发者社区 问答 正文

java 如何判断 一个字符串是否被urlencode 过

java 如何判断 一个 字符串 是否 被 urlencode 过?为了防止重复endcode

展开
收起
蛮大人123 2016-03-05 00:19:48 11362 分享 版权
2 条回答
写回答
取消 提交回答
  • public static String getUrlEncode(String str) { if (str == null || "".equals(str)) { return ""; } try { str = URLEncoder.encode(str, "UTF-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return str; } public static String getUrlDecode(String str) { if (str == null || "".equals(str)) { return ""; } try { str = URLDecoder.decode(str, "UTF-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return str; } public static boolean isUrlEncode(String en){ if (StringUtils.isEmpty(en)){ return false; } return !(en.length()==getUrlDecode(en).length()); }

    2019-08-07 15:50:52
    赞同 1 展开评论
  • 我说我不帅他们就打我,还说我虚伪

    urldecode一下,decode前后一致即未encode过,前后不一致即encode过。(具体原理可参看URLDecoder的源码)
    看了其他几位同学的回答。简单的补充一下:
    1、对于"a-z", "A-Z", "0-9", ".", "-", "*", "_",encode/decode前后不产生任何变化,所以实际上无需判断;
    2、" "被转换成"+",如果原字符串本来就含有"+",上述方法无效;
    3、其他的字符,根据不同的字符集先被转换成一到多个byte,然后每个byte被表示成类似"%xy"的字符串,其中xy是该byte值的16进制表示形式。所以对于原字符串本来含有"%"或者"%xy",上述方法也无效,对于"%xy",如果xy为非法字符,则会抛出IllegalArgumentException。
    所以如果需要得到精确的结果,需要自己另加额外的控制标志位。

    2019-07-17 18:52:48
    赞同 1 展开评论
问答分类:
问答地址: