url有%等特殊符号的处理

2023-12-29 15:46:39

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

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

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

前端代码:

如果说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编码。
      - '['
      - ']'
      - '|'
      - '`'
      - '\'
      - '{'
      - '}'

文章来源:https://blog.csdn.net/smile_life_/article/details/135290833
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。