// 转义聊天内容中的特殊字符
function replaceContent(content) {
// 支持的html标签
var html = function (end) {
return new RegExp('\\n*\\[' + (end || '') + '(pre|div|span|p|table|thead|th|tbody|tr|td|ul|li|ol|li|dl|dt|dd|h2|h3|h4|h5)([\\s\\S]*?)\\]\\n*', 'g');
};
content = (content || '').replace(/&(?!#?[a-zA-Z0-9]+;)/g, '&')
.replace(//g, '>').replace(/'/g, ''').replace(/"/g, '"') // XSS
.replace(/@(\S+)(\s+?|$)/g, '@$1$2') // 转义@
.replace(/face\[([^\s\[\]]+?)\]/g, function (face) { // 转义表情
var alt = face.replace(/^face/g, '');
return '
';
})
.replace(/img\[([^\s]+?)\]/g, function (img) { // 转义图片
return '
';
})
.replace(/file\([\s\S]+?\)\[[\s\S]*?\]/g, function (str) { // 转义文件
var href = (str.match(/file\(([\s\S]+?)\)\[/) || [])[1];
var text = (str.match(/\)\[([\s\S]*?)\]/) || [])[1];
if (!href) return str;
return '' + (text || href) + '';
})
.replace(/a\([\s\S]+?\)\[[\s\S]*?\]/g, function (str) { // 转义链接
var href = (str.match(/a\(([\s\S]+?)\)\[/) || [])[1];
var text = (str.match(/\)\[([\s\S]*?)\]/) || [])[1];
if (!href) return str;
return '' + (text || href) + '';
}).replace(html(), '\<$1 $2\>').replace(html('/'), '\$1\>') // 转移HTML代码
.replace(/\n/g, '
') // 转义换行
return content;
};
// 表情替换
var faces = function () {
var alt = getFacesIcon(), arr = {};
layui.each(alt, function (index, item) {
arr[item] = '/static/service/js/layui/images/face/' + index + '.gif';
});
return arr;
}();
// 表情对应数组
function getFacesIcon() {
return ["[微笑]", "[嘻嘻]", "[哈哈]", "[可爱]", "[可怜]", "[挖鼻]", "[吃惊]", "[害羞]", "[挤眼]", "[闭嘴]", "[鄙视]",
"[爱你]", "[泪]", "[偷笑]", "[亲亲]", "[生病]", "[太开心]", "[白眼]", "[右哼哼]", "[左哼哼]", "[嘘]", "[衰]",
"[委屈]", "[吐]", "[哈欠]", "[抱抱]", "[怒]", "[疑问]", "[馋嘴]", "[拜拜]", "[思考]", "[汗]", "[困]", "[睡]",
"[钱]", "[失望]", "[酷]", "[色]", "[哼]", "[鼓掌]", "[晕]", "[悲伤]", "[抓狂]", "[黑线]", "[阴险]", "[怒骂]",
"[互粉]", "[心]", "[伤心]", "[猪头]", "[熊猫]", "[兔子]", "[ok]", "[耶]", "[good]", "[NO]", "[赞]", "[来]",
"[弱]", "[草泥马]", "[神马]", "[囧]", "[浮云]", "[给力]", "[围观]", "[威武]", "[奥特曼]", "[礼物]", "[钟]",
"[话筒]", "[蜡烛]", "[蛋糕]"]
}