smartfoxserver扩展里面过滤聊天的不合法字符

http://blog.csdn.net/yc7369/article/details/35567105

最近做手游客户要求加上一个聊天功能,其实嘛,个人觉得这个聊天功能比较鸡肋,这部分几乎已经有tx被垄断,我们又何苦倘这趟浑水呢,手游聊天的游戏其实并不多。

主要原因很简单:服务器的负载会增大不少,维护更加麻烦,烧钱,而用这个功能的人也不会太多,也会出现服务器调控下的各种穿帮。

既然要趟这浑水,那也就没办法,聊天系统判断聊天内容是否包含有不合法字符还是需要的。

使用的是smartfoxserver服务器扩展,因为SFS默认它是UTF-8编码的,除了英文以外发送过来的字符都是会乱码的,所以我想了一天想到了下面的方法供大家参考,如果有不对的地方请留言提出!

try {

     String[] keyword = { "操", "fuck", "叼", "cao" };

String content = json.getString("content").trim();

Pattern p = Pattern.compile("\\s*|\t|\r|\n");
//正则表达式

Matcher m = p.matcher(content);

String after = m.replaceAll(""); //把所有上述表达式的东西全部换成空字符串

after = MsgTool.gbkToutf8(after); //把所用的字符都全部转化为UTF-8编码,这样就不会出现编码问题而不能比较

boolean flag = false; // 判断是否包含屏蔽字符

for (int i = 0; i < keyword.length; i++) {

String kw = MsgTool.gbkToutf8(keyword[i]);

if (after.indexOf(kw) != -1) { //如果包含有的话就返回

flag = true;

break;

}

}

MsgJSONObject msj = MsgJSONObject.instance();

if (flag) {

log.info("有用户聊天时发送不合法字符,用户是:" + user.getName()); //发送给客户端说用户的聊天内容有不合法字符

msj.put("cmd", "chatUnlawful");

sendMessage(user, msj);

} else { //如果没有就正常发送

log.info("有用户聊天,用户是:" + user.getName());

log.info("聊天内容是:" + content);

msj.put("cmd", "chat");

msj.put("msg", content);

sendMessage(getRoom(user), msj);

}

} catch (Exception e) {

e.printStackTrace();

log.error("读取聊天内容错误");

}

/**编码转换,将中文变为UTF-8

* @param chenese 要中文字符

* @return

*/

public static String gbkToutf8(String chinese){

char c[] = chinese.toCharArray();

byte [] fullByte =new byte[3*c.length];

for(int i=0; i<c.length; i++){

int m = (int)c[i];

String word = Integer.toBinaryString(m);

StringBuffer sb = new StringBuffer();

int len = 16 - word.length();

//补零

for(int j=0; j<len; j++){

sb.append("0");

}

sb.append(word);

sb.insert(0, "1110");

sb.insert(8, "10");

sb.insert(16, "10");

String s1 = sb.substring(0, 8);

String s2 = sb.substring(8, 16);

String s3 = sb.substring(16);

byte b0 = Integer.valueOf(s1, 2).byteValue();

byte b1 = Integer.valueOf(s2, 2).byteValue();

byte b2 = Integer.valueOf(s3, 2).byteValue();

byte[] bf = new byte[3];

bf[0] = b0;

fullByte[i*3] = bf[0];

bf[1] = b1;

fullByte[i*3+1] = bf[1];

bf[2] = b2;

fullByte[i*3+2] = bf[2];

}

try {

String fullStr = new String(fullByte, "UTF-8");

return fullStr;

} catch (UnsupportedEncodingException e) {

// TODO Auto-generated catch block

e.printStackTrace();

log.error("转换字符编码错误");

return "";

}

}

http://blog.csdn.net/yc7369/article/details/35567105

smartfoxserver扩展里面过滤聊天的不合法字符

时间: 2024-10-09 12:56:52

smartfoxserver扩展里面过滤聊天的不合法字符的相关文章

列出某文件夹及其子文件夹下面的文件,并可根据扩展名过滤

/** * 列出某文件夹及其子文件夹下面的文件,并可根据扩展名过滤 * * @param path */ public static void list(File path) { if (!path.exists()) { System.out.println("文件名称不存在!"); } else { if (path.isFile()) { if (path.getName().toLowerCase().endsWith(".pdf") || path.get

Python string中删除(过滤)掉emoji表情字符

最近做了一个需求,把公众号的用户信息同步到服务端,发现很多用户的昵称里面都有表情符号(emoji), 一般的处理方式是把MySQL的编码改成 utf8mb4,后来讨论了下,这些表情也没什么用,入库的时候直接删除就好了. 过滤方法 Python怎么过滤 emoji表情符号呢? 下面是剔除表情字符串的代码片段 python2.7 下测试 import re emoji_pattern = re.compile( u"(\ud83d[\ude00-\ude4f])|" # emoticons

JSON转换类(一)--过滤特殊字符,格式化字符型、日期型、布尔型

/// <summary> /// 过滤特殊字符 /// </summary> private static string String2Json(String s) { StringBuilder sb = new StringBuilder(); for (int i = 0; i < s.Length; i++) { char c = s.ToCharArray()[i]; switch (c) { case '\"': sb.Append("\\\

(18)c++项目练习一(功能会不断扩展)--------【聊天工具】

1.准备使用Qt和C++做一个远程(基于互联网的)聊天工具,需要实现以下功能 (1)多对多聊天功能 (2)文件传输功能 (3)注册.登录功能 (4)加好友.同意好友功能 (5)好友列表.黑名单功能(分组功能) (6)语音聊天功能 (7)表情发送功能 2.UML类图设计

通讯聚合类Chrome 扩展:All-in-One Messenger,把主流聊天服务聚合在一个应用窗口内

原文地址:http://whosmall.com/?post=420 本文标签: Chrome扩展 Chrome浏览器 通讯聚合类Chrome扩展 All-in-One-Messenger 主流聊天服务聚合 我发现了 All-in-One Messenger,它是一款轻量的 Chrome 扩展,作用与 Franz基本相同,只需要打开一个窗口,所有的通讯服务会以网页标签栏的形式呈现,方便你自如切换,可以大大提高了沟通的效率.但是和「庞大」的 Franz 相比,All-in-One Messenge

字符过滤函数,过滤重复字符串

实际作用不大,有时会用到,留着作为以后参考.若有缘者看到,恳请提出优化方案 1 USE [master] 2 GO 3 /****** Object:  UserDefinedFunction [dbo].[CharFilter]    Script Date: 04/06/2016 17:20:16 ******/ 4 SET ANSI_NULLS ON 5 GO 6 SET QUOTED_IDENTIFIER ON 7 GO 8 --=============================

Struts过滤器过滤某些字符

(1)天朝的规矩做项目的时候可能需要过滤某些特定的字符,在更多的用途是安全的考虑,下边就是一个过滤字符的简单案例: (2)过滤器代码如下: package com.lc.filter; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletExc

grep及扩展正则表达式

正则表达式有两类,分为基本正则表达式和扩展正则表达式,是使用命令egrep来使用扩展正则表达式,它与grep很多功能相同,仅在元字符上实现了些扩展,在元字符的表示上与基本正则表达式略不同. 1. 命令格式: egrep [option] pattern file 2. 命令功能: 用于过滤/搜索的特定字符.可使用扩展正则表达式能多种命令配合使用,使用上十分灵活 . 3. 命令参数: egrep等同于grep -E选项 扩展正则表达式的元字符: 字符匹配: . #匹配单个非换行符的字符 如:'gr

ZendFramework2学习笔记 表单过滤、表单验证

ZF2有很多内建的Filter和Validator组件,可以方便地对表单数据进行处理. Filter的作用是过滤表单数据,例如,去除一些空格,替换一些敏感词等. Validator的作用是检验表单数据是否合规,如果不合规,则提供不合规原因的文本消息. 假设有这样一个Form: 表单数据存储到数据库之前的要求是: 用户名:过滤左右空格,字符都转换为小写,只能是由数字和字母字符组成,长度限制,数据库必须不存在该用户名. 密码:密码1和密码2必须相同,长度限制. 邮箱:必须符合密码格式,加密存储,长度