url有%等特殊符号的处理

场景:推送消息给微信公众号,公众号展示内容限制20个字符,如果内容过多,就展示不完全。所以可以通过点击详情查看更多内容

所以弄了一个公共的html页面,需要展示什么传什么。比如

展示效果如:(url的data=后面是html代码应该也可以渲染出来,如果不行就是还有特殊符号未处理。结合全文理解,你应该就会处理了。)

如果后面是html代码,传给微信推送消息会报错:data format error rid: 658e7a07-4643dbf9-07a3c8ff,我估计是微信那边没有对url做太多的兼容处理导致的。但是直接浏览器打开链接是没问题的。(微信那边估计对双引号处理不好。html和js代码中难免有双引号,你可以把双引号换成特殊字符,然后在访问的页面再用js还原成双引号渲染。)

前端代码:

如果说url的 ?myHtml= 完整html代码,会存在换行问题:URL 中通常不允许包含换行符。URL 规范定义了一种特定的格式,要求 URL 中的字符集受到限制,并且不能包含控制字符或非打印字符,包括换行符。所以一定要处理好换行,不然有些代码会识别失败,比如识别为注释的代码了

<script>
        var data = location.href.split('?data=');
        if(data.length == 2){
            var d = data[1];
            d = customDecodeURIComponent(d);
            $('#content').html(decodeURIComponent(d));
        }

        var myHtml = location.href.split('?myHtml=');
        if(myHtml.length == 2){
            var d = myHtml[1];
            d = customDecodeURIComponent(d);
            $('html').html(decodeURIComponent(d));
        }

        //这个函数使用正则表达式来查找百分号,并检查其后是否跟着两个有效的十六进制字符。
        //如果不是,它会将该百分号替换为 %25,否则会保留原样。
        //这样可以避免将本来是普通百分号的情况误解为编码。
        function customDecodeURIComponent(str) {
            return str.replace(/%(?![0-9A-Fa-f]{2})/g, '%25');
        }
    </script>

 注意:

因为有特殊字符,后端项目如果是springboot的话,其使用的是嵌入式的Tomcat服务器。所以,有特殊符号的url会报400错误

此时,还没有进入后端程序呢,只不过到了Tomcat就出错了,所以要配置下Tomcat的url的特殊符号处理。springboot的yml文件配置如下:

server:
  port: 8097
  servlet:
    encoding:
      charset: UTF-8
      enabled: true
    session:
      timeout: 18500 # 单位为秒,这里设置Session的过期时间为30分钟
    context-path: /yyy

  tomcat:
    relaxed-path-chars: #relaxedPathChars: 该属性定义了Tomcat容器对于URL路径中非转义字符的容忍度。路径是URL中域名后的部分,即http://example.com/这部分就是路径。在这个路径中,有一些字符是被允许的,即使它们没有被进行URL编码。默认情况下,Tomcat容器对路径字符的容忍度是比较严格的,但通过配置relaxedPathChars属性,你可以告诉Tomcat容器允许额外的字符,而不需要进行URL编码。
    relaxed-query-chars: #relaxedQueryChars: 该属性定义了Tomcat容器对于URL查询字符串中非转义字符的容忍度。查询字符串是URL中?后的部分,包含参数和其对应的值。与relaxedPathChars类似,通过配置relaxedQueryChars属性,你可以告诉Tomcat容器允许额外的字符,而不需要进行URL编码。
      - '['
      - ']'
      - '|'
      - '`'
      - '\'
      - '{'
      - '}'

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值