URL编解码

为什么需要对URL进行编码?

通常如果一样的东西需要编码,就说明这样的东西并不适合传输。

至于原因有很多:
1.URL的编码格式采用的是ASCII码而不是Unicode,这也就是说你不能在URL中包含任何非ASCII字符,比如中文
2.URL参数字符串中如果包含”&”或者”%”势必会造成服务器解析错误
3.参数值中就包含=或者&这样的特殊子字符,会造成解析错误

URL编码的原则就是使用安全的字符(没有特殊用途或者特殊意义的可打印字符)去表示那些不安全的字符

使用URL编码解码

URLDecoder 和 URLEncoder 用于完成普通字符串 和 application/x-www-form-urlencoded MIME 字符串之间的相互转换

// 将application/x-www-form-urlencoded字符串转换成普通字符串
//解密 
        String str = URLDecoder.decode("加密内容", "UTF-8");
        String str = URLDecoder.decode("加密内容", "GBK");
        
// 将普通字符串转换成application/x-www-form-urlencoded字符串
//加密
        String urlStr = URLEncoder.encode("等待加密的内容", "utf-8");
        String urlStr2 = URLEncoder.encode("等待加密的内容", "GBK");

判断是不是已经URL加密过:


    /**
     * 判断 str 是否已经 URLEncoder.encode() 过
     * 经常遇到这样的情况, 拿到一个 URL, 但是搞不清楚到底要不要 URLEncoder.encode()
     * 不做 URLEncoder.encode() 吧, 担心出错, 做 URLEncoder.encode() 吧, 又怕重复了
     *
     * @param str 需要判断的内容
     * @return 返回 {@code true} 为被 URLEncoder.encode() 过
     */
    public static boolean hasUrlEncoded(String str) {
        boolean encode = false;
        for (int i = 0; i < str.length(); i++) {
            char c = str.charAt(i);
            if (c == '%' && (i + 2) < str.length()) {
                // 判断是否符合urlEncode规范
                char c1 = str.charAt(i + 1);
                char c2 = str.charAt(i + 2);
                if (isValidHexChar(c1) && isValidHexChar(c2)) {
                    encode = true;
                    break;
                } else {
                    break;
                }
            }
        }
        return encode;
    }

    /**
     * 判断 c 是否是 16 进制的字符
     *
     * @param c 需要判断的字符
     * @return 返回 {@code true} 为 16 进制的字符
     */
    private static boolean isValidHexChar(char c) {
        return ('0' <= c && c <= '9') || ('a' <= c && c <= 'f') || ('A' <= c && c <= 'F');
    }

参考地址

为什么要进行URL编码:
转载地址:https://blog.csdn.net/Lxd_0111/article/details/78028889
原地址:https://www.cnblogs.com/jerrysion/p/5522673.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

周周都刷火焰猫头鹰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值