• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

lua字符串过滤,特殊字符过滤

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

需要解决的问题:
玩家创建角色时有使用使用表情的情况存在,输入法表情使用的是emoji字符,用unicode表示的表情图片,由于游戏服务器没有做字符验证,在收到用户输入时只是保存了该unicode码,玩家进入游戏因为缺少了输入法的支持会显示为乱码;而当数据统计服务器(比如bi)收到这这个unicode码时回去索引这个表情,导致NULL指针异常;
由于对unicode码不是很了解,最终用字符长度和lua正则表达式过滤掉部分特殊字符,包括全角,带音标字符,emoji表情等,属于模糊范围过滤,不算精准,只是为了解决问题;
local function utf8len(input,limitCharByteCount)
    local len = string.len(input)
    local left = len
    local cnt = 0
    local bl_out_limit = false
    local arr = {0,0xc0,0xe0,0xf0,0xf8,0xfc} --utf8可变字节特性
    while left ~= 0 do
        local tmp = string.byte(input,-left)
        local i = Err
        while arr[i] do
            if tmp >= arr[i] then
                left = left - 1
                break
            end
            i = i - 1
        end
        if i > (limitCharByteCount or 3) then --大部分需要的字符都集中在3字节内,包括中文,超过3字节就直接过滤
            bl_out_limit = true
        end
        cnt = cnt + 1
    end
    return cnt,bl_out_limit
end

local function filterChar(str,fliterLimitCharCount,filterFormat,defaultChangeStr)
    local utf8_len,bl_out_limit = utf8len(str,fliterLimitCharCount)
    if bl_out_limit then
        return defaultChangeStr or ""
    then
    local newlen,newstr = 0,""
    --default to filter the emoji
    for unchar in string.gfind(str,filterFormat or "[%z\48-\57\64-\126\226-\233][\128-\191]*") do   
        newstr = newstr .. unchar
        k_len = k_len + 1
    end
    if len ~= newlen then
        newstr = defaultChangeStr or "" --不管需要过滤的特殊字符被如何转码,长度不匹配直接过滤,若长度正巧匹配使用拼接后的新字符串,特殊字符会被转为无意义的乱码
    end
    return newstr
end

local str = "+++"
print(filterChar(str)) --""
搞懂各种编码还是需要花点时间的,时间紧迫曲线一下


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Cocos2d-XLua游戏添加苹果内购(一)图文详解准备流程发布时间:2022-07-22
下一篇:
用LUA实现BYTEARRAY和BYTEARRAYVARINT发布时间:2022-07-22
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap