logo头像

技术是一种信念

微信小程序昵称特殊字符的处理

昵称处理

在小程序的开发过程中,我们不可避免的需要保存用户昵称,但是小程序中的昵称是支持特殊字符的。有的用户是很喜欢在昵称中加入emoj表情的。所以我们需要解决微信登录时昵称中包含特殊字符,不能存入数据库问题。

大致思路则是接收到的用户的昵称参数进行编码处理。

对昵称进行编码

  • 首先对于获取到的字符串进行加密
1
wc会员.set昵称(Base64.encodeBase64String(btbUser.getNickName().getBytes("utf-8")));

数据保存之后的结果如下图所示:

avatar

解码的时候采用:

nickname = new String(Base64.decodeBase64(nickname.getBytes()), “utf-8”);

这里不使用这种方式解码的原因是如果是对页面初始化的中集合进行处理的话,需要对取出来的数据在进行一次遍历操作对字符进行处理,过程比较繁琐。

对昵称进行解码

在后台页面展示时,对字符串进行解码操作,这里采用的是crypto-js。(这里试过很多种方法,但是对于包含特殊字符以及中文的编码和解码支持的都不是很好,无法和java、mysql等方式进行衔接)

  • 首先在github上面下在对应的js , 或者使用npm的方式进行安装.
1
npm install crypto-js
  • 页面中引入相应的js文件。
1
2
<script type='text/javascript' src="${appPath}/common/btb/js/crypto-js.js"></script>
<script type='text/javascript' src="${appPath}/common/btb/js/enc-base64.js"></script>
  • js中定义个一处理昵称的函数:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function formatNickName(data) {	
if(data){
data = base64_decode(data);
return data;
}else{
return "";
}
}
//编码
function base64_encode(str){
var tempstr=CryptoJS.enc.Utf8.parse($("#source").val());
var base64str=CryptoJS.enc.Base64.stringify(tempstr);
return base64str;
}
//解码
function base64_decode(str){
var words = CryptoJS.enc.Base64.parse(str);
return words.toString(CryptoJS.enc.Utf8)
}
  • 在对应列表中加入格式化函数
1
2
3
4
<st:objList id="fusr0010" tabRowId="oid" tabSearchId="fusr0010QuerySearchForm" tabPath="/btb/usr/fusr0010_query.st"  tabInstanceName="fusr0010Ap" 
tabRowhandler="rightHander" tabTitle="用户管理" tabPageSize="7">
<st:objListColumn columnDisplay="昵称" columnName="昵称" columnSortName="昵称" columnWidth="10%" columnProcess="formatNickName"></st:objListColumn>
</st:objList>

结果展示

avatar

【扩展】

除了java和js中可以对字符进行处理。在mysql5.6及之后也有提供了响应函数支持。

  • to_base64
1
2
3
4
5
6
mysql> select to_base64('helloworld');
+-------------------------+
| to_base64('helloworld') |
+-------------------------+
| aGVsbG93b3JsZA== |
+-------------------------+
  • from_base64
1
2
3
4
5
6
mysql> select from_base64('aGVsbG93b3JsZA==');
+---------------------------------+
| from_base64('aGVsbG93b3JsZA==') |
+---------------------------------+
| helloworld |
+---------------------------------+