微信小程序评论显示emoji的方法 附上代码和类文件 不需要改数据库

本文介绍了一种使用Base64编码解决在数据库中存储emoji表情的问题,通过将表情转换为Base64字符串,实现在前后端之间的传输与存储。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

要显示 emoji表情,就需要把emoji表情存入数据库 但是表情基本上算是一张图片,所以直接存到字段里是不行的,除非把数据库字符集改成 Utf-8mb4 ,下面我们用一种另简单的方法去实现:Base64加密.

我们先导入Base64加密的类 (Js文件 文章下面又代码 直接复制粘贴可用) ,然后 用base64加密之后储存到数据库里,然后取出的时候再解密 这些加密解密操作均在前端操作.

下面上代码:

var base = require("../base64.js") //导入base64 类所在的JS文件 
var base64 = new base.Base64(); //创建实例
var content=base64.encode(this.data.content)// 加密
var title=base64.encode( this.data.title);
wx.request({
                url: '你的api接口',
                data: { 
					title: title,
                    content: content,
                },
                method: 'POST',
                success: function(e) {
                    //成功后的操作
                }
})
var base64=new base.Base64();

wx.request({
			url: 你的接口地址',
			data:{
				id:0
			},
			success:function(e){
				var i;
				//得到数据 循环遍历评论 然后解密
				for (i in e.data.data.comment.comment){ //这里是遍历对象的方式,不懂看js文档
					e.data.data.comment.comment[i].content = base64.decode(e.data.data.comment.comment[i].content);//主要看这里 解密评论数据
				}
                //保存数据
				that.setData({
					detail:e.data.data,
					detail_content: base64.decode(e.data.data.article.content),//解密内容
					detail_title: base64.decode(e.data.data.article.title)//解密标题
				})
			}
		})
//这里是Base64类 JS文件

function Base64() {
	// private property  
	const _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";

	// public method for encoding  
	this.encode = function (input) {
		var output = "";
		var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
		var i = 0;
		input = _utf8_encode(input);
		while (i < input.length) {
			chr1 = input.charCodeAt(i++);
			chr2 = input.charCodeAt(i++);
			chr3 = input.charCodeAt(i++);
			enc1 = chr1 >> 2;
			enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
			enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
			enc4 = chr3 & 63;
			if (isNaN(chr2)) {
				enc3 = enc4 = 64;
			} else if (isNaN(chr3)) {
				enc4 = 64;
			}
			output = output +
				_keyStr.charAt(enc1) + _keyStr.charAt(enc2) +
				_keyStr.charAt(enc3) + _keyStr.charAt(enc4);
		}
		return output;
	}

	// public method for decoding  
	this.decode = function (input) {
		var output = "";
		var chr1, chr2, chr3;
		var enc1, enc2, enc3, enc4;
		var i = 0;
		input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
		while (i < input.length) {
			enc1 = _keyStr.indexOf(input.charAt(i++));
			enc2 = _keyStr.indexOf(input.charAt(i++));
			enc3 = _keyStr.indexOf(input.charAt(i++));
			enc4 = _keyStr.indexOf(input.charAt(i++));
			chr1 = (enc1 << 2) | (enc2 >> 4);
			chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
			chr3 = ((enc3 & 3) << 6) | enc4;
			output = output + String.fromCharCode(chr1);
			if (enc3 != 64) {
				output = output + String.fromCharCode(chr2);
			}
			if (enc4 != 64) {
				output = output + String.fromCharCode(chr3);
			}
		}
		output = _utf8_decode(output);
		return output;
	}

	// private method for UTF-8 encoding  
	const _utf8_encode = function (string) {
		string = string.replace(/\r\n/g, "\n");
		var utftext = "";
		for (var n = 0; n < string.length; n++) {
			var c = string.charCodeAt(n);
			if (c < 128) {
				utftext += String.fromCharCode(c);
			} else if ((c > 127) && (c < 2048)) {
				utftext += String.fromCharCode((c >> 6) | 192);
				utftext += String.fromCharCode((c & 63) | 128);
			} else {
				utftext += String.fromCharCode((c >> 12) | 224);
				utftext += String.fromCharCode(((c >> 6) & 63) | 128);
				utftext += String.fromCharCode((c & 63) | 128);
			}

		}
		return utftext;
	}

	// private method for UTF-8 decoding  
	const _utf8_decode = function (utftext) {
		var string = "";
		var i = 0;
		// var c = c1 = c2 = 0;
		var c = 0;
		var c1 = 0;
		var c2 = 0;
		var c3 = 0;
		while (i < utftext.length) {
			c = utftext.charCodeAt(i);
			if (c < 128) {
				string += String.fromCharCode(c);
				i++;
			} else if ((c > 191) && (c < 224)) {
				c2 = utftext.charCodeAt(i + 1);
				string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
				i += 2;
			} else {
				c2 = utftext.charCodeAt(i + 1);
				c3 = utftext.charCodeAt(i + 2);
				string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
				i += 3;
			}
		}
		return string;
	}
}

//对小程序暴露接口 这个一定要有
module.exports = {
	Base64: Base64,
}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值