注:文章转载需注明出处,违规必究。

原文地址:点击打开链接

最近在Xlua中做一个聊天功能,其中提供了敏感词汇表,不过我发现其中114项(共16000+项)在require时会失败导致界面加载不出来,如下:

--"<\haschisch\b",
--"\<an[oi]\>",
--"\<anal",
--"\<bagasc",
--"\<baldracc",
--"\<balle\>",
--"\<bastard",
--"\<batton[ae]\>",
--"\<bocchin",
--"\<bong\>",
--"\<bukk?ak+e\>",
--"\<caga",

--"\<cappell",

--"\<checc",

--"\<chiava",

--"\<cocaina\>",
--"\<coddio\>",
--"\<cogl",
--"\<cul[aoi]\>",
--"\<dild[oi]\>",
--"\<dio [ck]ane?\>",
--"\<dio boia\>",
--"\<dio porco\>",
--"\<dio[ck]ane?\>",
--"\<dioboia\>",
--"\<dioporco\>",
--"\<ditalin",
--"\<eiacul",
--"\<fanc",
--"\<fellatio\>",
--"\<fi[cg]a",
--"\<figli[oa] di puttana\>",
--"\<figli[oa] di troia\>",
--"\<figli[oa]diputtana\>",
--"\<figli[oa]ditroia\>",
--"\<fott",
--"\<fregn",
--"\<froci",
--"\<gangbang\>",
--"\<ganja\>",
--"\<gay\>",
--"\<hashish\>",
--"\<ingoi",
--"\<lesb",
--"\<limona",
--"\<lsd\>",
--"\<mari?juana\>",
--"\<merd",
--"\<mescalina\>",
--"\<metanfetamina\>",
--"\<meth\>",
--"\<mignott+",
--"\<milf\>",
--"\<minchi",
--"\<nazi",
--"\<necrofil",
--"\<negr",
--"\<nerchi",
--"\<oppio\>",
--"\<orgasm",
--"\<pedofil",
--"\<pen[ei]\>",
--"\<pipp[ae]\>",
--"\<pirl",
--"\<pompin",
--"\<porc",
--"\<porca madonna\>",
--"\<porca puttana\>",
--"\<porcamadonna\>",
--"\<porcaputtana\>",
--"\<porco dio\>",
--"\<porcod+io+\>",
--"\<porn",
--"\<puttan",
--"\<r[ie]cchion",
--"\<roipnol\>",
--"\<sborr?",
--"\<scopa",
--"\<sega",
--"\<seghe\>",
--"\<sorca\>",
--"\<sorche\>",
--"\<sperma\>",
--"\<stronz",
--"\<stupr",
--"\<succhiacazz[oi]\>",
--"\<succhiaminchi[ae]\>",
--"\<succhiapen[ei]\>",
--"\<terron",
--"\<testa di cazzo\>",
--"\<testa di minchia\>",
--"\<testadicazzo\>",
--"\<testadiminchia\>",
--"\<tett[ae]\>",
--"\<tetton[ae]\>",
--"\<trans\>",
--"\<transessual[ei]\>",
--"\<travell[io]\>",
--"\<travon[ei]\>",
--"\<troi",
--"\<tromba",
--"\<vacca\>",
--"\<vacch",
--"\<vaffancul",
--"\<vagin",
--"\<viagra\>",
--"\<vibrator[ei]\>",
--"\<violentare\>",
--"\<zinn[ae]\>",
--"\<zoccol[ae]\>",
--"\<zoofil",
--"[\S]*\.com\b",
--"[\S]*\.cn\b",

以上部分取消注释则无法加载

具体屏蔽方法如下:

--检查违规字符 并返回替换后的字符function UIUtils.CheckString(acStr,gsubChar)local tempAcStr = acStracStr = string.gsub(acStr, " ", "")acStr = string.gsub(acStr, "\r", "")acStr = string.gsub(acStr, "\n", "")local bHasForbidden = falsefor k,v in pairs(BannedWordsTable) dolocal startIndex,endIndex = string.find(acStr,v)local nextChar = ""local localHasForbidden = falselocal checkRet = nilif startIndex ~= nil and endIndex ~=nil thenlocal bHas = UIUtils.HasChinese(v)checkRet = vif bHas == false then -- 不含中文local iLen = #acStrif startIndex == 1 and string.find(acStr,v.."%W") then --- %W子母和数字bHasForbidden = truelocalHasForbidden = trueif not gsubChar thenbreakendelseif string.find(acStr,"%W"..v.."%W") thenbHasForbidden = truelocalHasForbidden = trueif not gsubChar thenbreakendelseif endIndex == #acStr and string.find(acStr,"%W"..v) thenbHasForbidden = truelocalHasForbidden = trueif not gsubChar thenbreakendendelsebHasForbidden = truelocalHasForbidden = trueif not gsubChar thenbreakendendendif gsubChar and localHasForbidden thenlocal startIndex, endIndex = string.find(acStr, checkRet)while startIndex do-- get utf8 stringlocal subString = string.sub(acStr, startIndex, endIndex)local replaceStr = string.rep(gsubChar, UIUtils.GetUTF8Length(subString))acStr = string.gsub(acStr, checkRet, replaceStr, 1)startIndex, endIndex = string.find(acStr, checkRet, endIndex + 1)endendendif bHasForbidden == true thenreturn bHasForbidden, acStrelsereturn bHasForbidden, tempAcStrend
endfunction UIUtils.HasChinese(str)local ptr = 1repeatlocal char = string.byte(str, ptr)local char_len = UIUtils.GetUTF8CharLength(char)if char > 127 thenreturn trueendptr = ptr + char_lenuntil(ptr>#str)return false
end--根据UTF8流获取字符串长度
--GetUTF8Length("一二三四五六七") 返回7
function UIUtils.GetUTF8Length(str)local len = 0local ptr = 1repeatlocal char = string.byte(str, ptr)local char_len = UIUtils.GetUTF8CharLength(char)len = len + 1ptr = ptr + char_lenuntil(ptr>#str)return len
end--根据首字节获取UTF8需要的字节数
function UIUtils.GetUTF8CharLength(ch)local utf8_look_for_table = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 1, 1,}return utf8_look_for_table[ch]
end

Lua中的聊天屏蔽敏感词汇相关推荐

  1. java屏蔽游戏中骂人的话,替换为*,屏蔽敏感词汇

    方法一: package com.oracle.corepublic class Replace {public static void main(String[] args){String str= ...

  2. java过滤器敏感字的拦截_【JavaWeb】94:如何屏蔽敏感词?

    今天是刘小爱自学Java的第94天. 感谢你的观看,谢谢你. 话不多说,开始今天的学习: 一.用户评论功能 网络上很多平台都会有敏感词屏蔽,有些词语打出来会被和谐掉. 虽说现在主张言论自由,但我大中华 ...

  3. 敏感词汇过滤(不区分大小写)

    最近项目中,用户评论内容需要屏蔽敏感词汇,从网上总结以下方法,(不区分大小写,如想设置大小写敏感,可以把代码中content..toLowerCase()去掉).具体看代码: 1.读取敏感词汇文档 & ...

  4. 【敏感词汇过滤算法】基于DFA-前缀树的敏感词汇过滤算法(项目实用)

    在敏感词汇过滤这块,不同的算法所造成的性能差异是非常大的,选择一个合适的算法非常重要.因为以前做算法的时候做过类似前缀树的字符串匹配之类的算法,所以一开始就打算用前缀树做的,后面了解了一下DFA的相关 ...

  5. Java基于Socket实现聊天、群聊、敏感词汇过滤功能

    首先的话,这个代码主要是我很久以前写的,然后当时还有很多地方没有理解,现在再来看看这份代码,实在是觉得丑陋不堪,想改,但是是真的改都不好改了- 所以,写代码,规范真的很重要. 实现的功能: 用户私聊 ...

  6. 小程序中关于敏感词汇检测

    小程序审核增加敏感词汇校验,避免违法违规而被停用服务或者投诉. 本文例子引用的百度AI开发者提供的API: 链接位置:https://console.bce.baidu.com/ai/#/ai/ocr ...

  7. js实现敏感词汇屏蔽和去除HTML标签

    有些文字内容不适宜,就会被屏蔽掉,这就用到了string类型的替换方法,当然实现这种方法的有很多种,但是正则是简便的. var str = 'asdfaefg'; str.replace('a','F ...

  8. 鸿蒙os 2.0玩吃鸡,华为鸿蒙OS2.0[敏感词汇屏蔽]能简测:极致画质下的吃鸡王者更胜EMUI11...

    炫舞雷公电母IT之家5月1日消息华为本周已经向部分拥有测试资格的用户推送了H..armonyOS2.0开发者公测版更新,虽然部分功能体验与基于安卓10的EMUI11没有太大差别,但似乎已经给我们带来了 ...

  9. 敏感词汇检测及返回敏感源词汇

    import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map;/* ...

  10. Java过滤敏感词汇算法(字典树)

    定义节点 import java.util.ArrayList; import java.util.List;public class Node {private char root;private ...

最新文章

  1. C++ BYTE数组转字符串
  2. 【机器学习】全面解析Kmeans聚类算法(Python)
  3. CentOS更换网卡设置
  4. 《编译原理》实验报告——递归下降语法分析器的构建
  5. C++异常处理的实现
  6. P4045-[JSOI2009]密码【AC自动机,状压dp】
  7. 南师大计算机毕设,南京师范大学是名牌大学吗?南师大毕业当老师难吗?
  8. 华为云平台使用手册_训练、标注成本节省90%!华为云自动化AI开发平台ModelArts 3.0发布,从训练数据到模型落地一站式打通...
  9. 29.Jwt集成(3):token设置过期时间、异常判断
  10. 解决在ubuntu 12.10安装vmware-tools实现文件共享问题
  11. 传奇手游漏洞获取gm权限_传奇私服漏洞获取gm权限
  12. 基于Esp8266的远程开机棒设计和实现
  13. 命令方块召唤别墅指令_我的世界:如何在MC召唤实体303?告示牌的数字,才是关键!...
  14. 也谈企业文化—执行力
  15. 计算机专业各种书籍整理
  16. 单词记忆系统二:音标字符输入(re从字符串中提取音标字符;依序打印音标字符;输入对应序号;替换序号。-> 完成“音标输入”)
  17. CSS3回炉计划-编码技巧
  18. STM32 芯片引脚的顺序说明
  19. 使用Wiredtiger恢复MongoDB中collection-x-xxx.wt文件数据
  20. 天邑ty1208z海思3798刷版本_天邑TY1208Z_S905_M2_1G8G_EMMC_双片内存 长虹代工线刷固件...

热门文章

  1. 【通信仿真】基于matlab蒙特卡罗算法2FSK系统抗噪声性能仿真【含Matlab源码 1632期】
  2. 【图像分割】基于matlab遗传算法优化K聚类图像分割【含Matlab源码 1605期】
  3. 【纸牌识别】基于matlab形态学扑克牌识别【含Matlab源码 1352期】
  4. python将一个文本文件复制到另一个文件中_使用Python逐行从一个文本文件复制到另一个文本文件...
  5. csv datatable 乱码 导出_C#将DataTable导出到csv文件
  6. python: 在pycharm打开带有中文字符的文件时,乱码,File was loaded in the wrong encoding: ‘UTF-8‘
  7. python的难点是什么,【python基础学习】基础重点难点知识汇总
  8. java visualvm 内存泄露_如何使用VisualVM检测Java内存泄漏
  9. node mysql sequlize_初步使用Sequelize模块 - Node实战
  10. 利用pil库处理图像