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
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!