好好的用文字不好嘛,弄什么表情啊=====
但是问题还是要解决,走过的坑,分享一下解决方案,个人认为这个是全网最简单的。
之前的做法是直接传递给后端,后端再返回来的时候,表情就会变成?!这种乱码。
①直接粗暴去掉表情,但是这样会导致一个问题,有些用户的昵称只有表情,全给干没了,昵称就是空了、、空了、、
//获取到的用户昵称
let wechatName = res.userInfo.nickName
//检测是否含有表情
var regRule = /\uD83C[\uDF00-\uDFFF]|\uD83D[\uDC00-\uDE4F]/g;
if(wechatName.match(regRule)){
wechatName = wechatName.replace(/\uD83C[\uDF00-\uDFFF]|\uD83D[\uDC00-\uDE4F]/g, "");
console.log(wechatName)
}
②发现小程序在传递参数的时候,昵称是自动进行了url转码,表情也被转码了,那这样后端直接返回给我编码后的昵称,前端再进行解码就可以还原表情了。
发现个问题,自动转码后的昵称到了后端会自动解码。问题不大,自己手动转一下就传给后端就行
encodeURI(wechatName)
经测试,decodeURI(wechatName) 和 decodeURIComponent(wechatName) 都可解码
decodeURI(wechatName)
decodeURIComponent(wechatName)
关于 url编码和解码,查阅资料后总结
encodeURIComponent 函数应该用于编码 query string 的参数值。
encodeURI 和 encodeURIComponent 之间的区别是 encodeURIComponent 编码整个字符串,而 encodeURI 忽略协议前缀(’http://’)以及域名。
encodeURIComponent 被设计用来编码所有的内容,而 encodeURI 会忽略 URL 中的域名部分。
1、escape 和 unescape
原理:对除ASCII字母、数字、标点符号 @ * _ + - . / 以外的其他字符进行编码。
2、encodeURI 和 decodeURI
原理:返回编码为有效的统一资源标识符 (URI) 的字符串,不会被编码的字符:! @ # $ & * ( ) = : / ; ? + '
encodeURI()是Javascript中真正用来对URL编码的函数。
编码:encodeURI(encodeURI(data.oneTypeName))
解码:decodeURI(request["OneTypeName"]);
3、encodeURIComponent 和 decodeURIComponent
原理:对URL的组成部分进行个别编码,而不用于对整个URL进行编码
encodeURI(encodeURI(data.oneTypeName))
decodeURI(request["OneTypeName"]);