转换内容为html实体
在开发业务过程中,遇到了对特殊字符的各种兼容,即需要支持各种特殊符号输入,又不引起注入问题,简单的方式就是转换为 utf8 编码,这些编码和html实体的作用一致,
转换过程中,又遇到了emoji表情是占用两个字节的,又加了对 emoji 字符的处理,
我这里就叫它html实体吧,参考了文末的文章,写出了如下方法:
/**
* 字符串转字符实体
* @param text 转换文本
* @param radix 返回的字符实体进制,只能是10进制和16进制,默认是10进制
* @returns
*/
var convertStringToHtmlEntity = function (text, radix) {
if (radix == null || radix == undefined) {
radix = 10;
}
//检测字符是否在 utf16字符范围内,特别用于处理 emoji 字符(HL)
var regUtf16High = /[\ud800-\udbff]+/;
var regUtf16Low = /[\udc00-\udfff]+/;
var htmlEntities = [];
var i = 0;
var prefix = radix === 10 ? "&#" : "&#x";
while (i < text.length) {
var char1 = text.charAt(i);
//如果是 emoji 字符
if (regUtf16High.test(char1) && i < text.length - 1) {
var char2 = text.charAt(i + 1);
if (regUtf16Low.test(char2)) {
var hCode = char1.charCodeAt(0);
var lCode = char2.charCodeAt(0);
var code = (hCode - 0xd800) * 0x400 + 0x10000 + lCode - 0xdc00;
var entity =
prefix +
(radix === 10 ? code.toString() : code.toString(16)) +
";";
htmlEntities.push(entity);
i += 2;
}
} else {
var code = char1.charCodeAt(0);
var entity =
prefix +
(radix === 10 ? code.toString() : code.toString(16)) +
";";
htmlEntities.push(entity);
i += 1;
}
}
var htmlEntityText = htmlEntities.join("");
return htmlEntityText;
};
测试:
convertStringToHtmlEntity('hello nick ,种花家 , Great Wall 😍😎🍜🍚',10);
/*
hello nick ,种花家 , Great Wall 😍😎🍜🍚
*/
convertStringToHtmlEntity('hello nick ,种花家 , Great Wall 😍😎🍜🍚',16);
/*
hello nick ,种花家 , Great Wall 😍😎🍜🍚
*/
注意:mysql数据库如果数据库编码类型为 utf8 是存储不了 emoji字符的,需要改为 utf8mb4
参考链接:
移动前端手机输入法自带emoji表情字符处理
https://blog.csdn.net/binjly/article/details/47321043
生活,有时候就是很简单,有时候却很要命。
标签:
emoji
, javascript
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!