前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >小程序-云开发-如何对敏感词进行过滤即内容安全的检测(下)

小程序-云开发-如何对敏感词进行过滤即内容安全的检测(下)

作者头像
itclanCoder
发布于 2020-10-28 08:50:54
发布于 2020-10-28 08:50:54
3.1K00
代码可运行
举报
文章被收录于专栏:itclanCoderitclanCoder
运行总次数:0
代码可运行

作者 | 随笔川迹

ID | suibichuanji

前言

撰文:川川

您将在本文中学习另外一种方式如何在小程序中对一段文本进行检测是否含有违规内容

  • 云函数中进行简单的配置一下,就可以实现文本内容的校验
  • 小程序端进行文本内容的弱校验,减少API的请求
  • 如何将涉及违规的文本内容用*号代替,进行过滤处理
  • 云函数调用方式的优点(推荐使用)

本文重点在于

  • 学会如何在小程序云开发中的云函数后端进行配置,实现文本内容的校验
  • 小程序端在什么时机进行弱校验,为什么有必要这么做
  • 遇到违规文本内容用特殊字符替代

· 正 · 文 · 来 · 啦 ·

在前面一文小程序-云开发-如何对敏感词进行过滤即内容安全的检测(上)中通过在小程序端请求云函数msgSecCheck1,通过request,request-promise请求微信提供的内容安全接口以及获取access_token,实现了对小程序端输入文本内容安全的检测

如果您之前有动手实践过的话,您依然发现,这个过程仍然很复杂,分别要请求两个接口,还要拼接字段,还要手动的去查找APPID,以及APPSECRET秘钥

在如今的云开发中,提供了文本内容检测的接口,只需要简单的配置一下就可以了的

下面就来看一下是如何简单,实现的

01

在云函数目录下创建云函数

小程序端的代码几乎不用怎么变,这里为了区别上一节代码,在云函数端重新创建一个msgSecCheck2的云函数

小程序端wxml

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!--pages/msgSecCheck/msgSecCheck.wxml-->
<view class="container">
  <textarea class="content" placeholder="写点文字..." bindinput="onInput" auto-focus bindfocus="onFocus" bindblur="onBlur">
  </textarea>
</view>

<view class="footer">
  <button class="send-btn" size="default" bind:tap="send">发布</button>
</view>

小程序端wxss

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/* pages/msgSecCheck/msgSecCheck.wxss */
.container {
  padding: 20rpx;
}

.content {
  width: 100%;
  height: 360rpx;
  box-sizing: border-box;
  font-size: 32rpx;
  border: 1px solid #ccc;
}

.footer {
  width: 100%;
  height: 80rpx;
  line-height: 80rpx;
  position: fixed;
  bottom: 0;
  box-sizing: border-box;
  background: #34bfa3;
}

.send-btn {
  width: 100% !important;
  color: #fff;
  font-size: 32rpx;
}

button {
  width: 100%;
  background: #34bfa3;
  border-radius: 0rpx;
}

button::after {
  border-radius: 0rpx !important;
}

小程序端的JS逻辑代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// pages/msgSecCheck/msgSecCheck.js
Page({

  /**
   * 页面的初始数据
   */
  data: {
    textareaVal: ''
  },
  // 监听表单时,数据有变化时
  onInput(event) {
    let textVal = event.detail.value;
    this.setData({
      textareaVal: textVal
    })

  },

  // 聚焦焦点时
  onFocus() {
    console.log('聚焦焦点时');
  },

  // 失去焦点时
  onBlur(event) {
    console.log("失去焦点时");
    // 前端可进行手动的弱校验,也可以在失去焦点时发送请求进行文本的校验,但是每次失去焦点就请求一次,这样是消耗云资源的,其实在发布时候与失去焦点做校验两者都可以


  },

  // 发布
  send() {
    // 请求msgSecCheck1云函数,对文本内容进行校验
    this._requestCloudMsgCheck();
  },

  _requestCloudMsgCheck() {
    let textareaVal = this.data.textareaVal;
    wx.cloud.callFunction({
      name: 'msgSecCheck2', // 只是把这个云函数名替换了一下的,其他并没有什么变化
      data: {
        content: textareaVal
      }
    }).then(res => {
      console.log(res);
      
    }).catch(err => {
      // 失败时,也就是违规做一些用户提示,或者禁止下一步操作等之类的业务逻辑操作
      console.error(err);
    })
  }

})

小程序云函数端msgSecCheck2目录下创建config.json文件,这个文件名称是固定的,添加如下配置即可,若是其他接口支持云函数的,也是类似的

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
  "permissions": {
    "openapi": [
      "security.msgSecCheck"
    ]
  }
}

在主入口index.js文件中,按照官方文档,填写下面几行代码就可以了的

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 云函数入口文件
const cloud = require('wx-server-sdk')

cloud.init()

// 云函数入口函数
exports.main = async(event, context) => {
  try {
    const result = await cloud.openapi.security.msgSecCheck({
      content: event.content // 小程序端传过来的值,content字段接收
    })
    return result;
  } catch (err) {
    return err;
  }
}

你会发现在小程序端检测一段文本是否违规,就这么几行云函数代码,就完成了这个文本内容校验功能的

其实这个openapi.security.msgSecCheck已经集成到wx-server-sdk当中了的,对外您只需提供要传入检测的文本就可以了的

最终会返回一个结果给您,若文本无违规,那么返回一个结果,若有违规,则返回一个结果 当然跟上节一样,仍需要对错误码进行处理的,无论是在云函数端还是小程序端的

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 云函数入口文件
const cloud = require('wx-server-sdk')

cloud.init()

// 云函数入口函数
exports.main = async(event, context) => {
  try {
    const result = await cloud.openapi.security.msgSecCheck({
      content: event.content
    })

    if (result.errCode === 87014) {
      return {
        code: 500,
        msg: '内容含有违法违规内容',
        data: result
      }
    } else {
      return {
        code: 200,
        msg: '内容ok',
        data: result
      }
    }
  } catch (err) {
    // 错误处理
    if (err.errCode === 87014) {
      return {
        code: 500,
        msg: '内容含有违法违规内容',
        data: err
      }
    }
    return {
      code: 502,
      msg: '调用msgSecCheck接口异常',
      data: err
    }
  }
}

当您在小程序端进行测试,输入一段违规的文本进行测试,如下所示,将会返回违规的状态码与信息提示

(输入一段违规的文本进行校验,点击图片可查看)

当您输入符合规则的文本时,便会返回成功时的状态码,以及对应合规的信息提示

(输入符合正规的文本时)

至此,通过云调用小程序提供的内置安全接口,非常简单容易的实现文本内容安全的校验

02

小程序端对文本内容弱校验

频繁的请求云函数接口,一定程度上会有损用户体验,造成小程序的卡顿等之类的情况的 对于一些常规敏感词,在小程序端是可以手动的进行自定义校验的,一种处理方式就是

但凡违规内容,可以强制用户不能输入,发布,或者评论等,还有一种处理方式就是,针对敏感词汇,用*号进行替代,如下所示

(敏感词汇用特殊符号处理)

那这个究竟是怎么实现的呢?

事件的触发应该是在失去焦点的时候,就进行常规自定义文文本内容校验的

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 *
 * 您也是可以单独将自定义的违规词汇放到一个utils文件,单独js文件当中,通过export的方式导出来,在想要使用的地方引入进去也是可以的
 */
const g_reg = /好贱|操|杀|贱|傻|疯|炮|奸|猪|笨|屁|麻痹|滚犊子|婊/gm

// 手动对敏感词检测
  _hasSensitiveWords(str) {
    if (str == '' || str == 'undefined') return false;
    if (g_reg.test(str)) { // 如果检测有违规,就返回true
      return true;
    }
  }

// 失去焦点时
  onBlur(event) {
    console.log("失去焦点时");
    // 前端可进行手动的弱校验,也可以在失去焦点时发送请求进行文本的校验,但是每次失去焦点就请求一次,这样是消耗云资源的,其实在发布时候与失去焦点做校验两者都可以
    const textVal = event.detail.value;
    if (this._hasSensitiveWords(textVal)) {
      wx.showToast({
        title: '含有敏感词,敏感词将会用***号处理',
      })
      this.setData({
        hasSensitiveWords: textVal.replace(g_reg, "***")
      })
      console.log(this.data.textareaVal);
    } else {
      this.setData({
        hasSensitiveWords: textVal
      })
      console.log(this.data.textareaVal);
    }

  }

以下是完整的示例代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 *
 * 你也是可以单独将自定义的文本放到一个js文件当中,通过export的方式导出来,在想要使用的地方引入进去也是可以的
 */
const g_reg = /操|杀|贱|傻|疯|炮|奸|猪|笨|屁|麻痹|滚犊子|婊/gm


// pages/msgSecCheck/msgSecCheck.js
Page({

  /**
   * 页面的初始数据
   */
  data: {
    textareaVal: '',
    hasSensitiveWords: ''
  },
  // 监听表单时,数据有变化时
  onInput(event) {
    let textVal = event.detail.value;
    this.setData({
      textareaVal: textVal
    })

  },

  // 聚焦焦点时
  onFocus() {
    console.log('聚焦焦点时');
  },

  // 失去焦点时
  onBlur(event) {
    console.log("失去焦点时");
    // 前端可进行手动的弱校验,也可以在失去焦点时发送请求进行文本的校验,但是每次失去焦点就请求一次,这样是消耗云资源的,其实在发布时候与失去焦点做校验两者都可以
    const textVal = event.detail.value;
    if (this._hasSensitiveWords(textVal)) {
      wx.showToast({
        title: '含有敏感词,敏感词将会用***号处理',
      })
      this.setData({
        hasSensitiveWords: textVal.replace(g_reg, "***")
      })
      console.log(this.data.textareaVal);
    } else {
      this.setData({
        hasSensitiveWords: textVal
      })
      console.log(this.data.textareaVal);
    }

  },

  // 发布
  send() {
    // 请求msgSecCheck1云函数,对文本内容进行校验
    this._requestCloudMsgCheck();
  },

  _requestCloudMsgCheck() {
    let textareaVal = this.data.textareaVal;
    wx.cloud.callFunction({
      name: 'msgSecCheck2',
      data: {
        content: textareaVal
      }
    }).then(res => {
      console.log(res);

    }).catch(err => {
      // 失败时,也就是违规做一些用户提示,或者禁止下一步操作等之类的业务逻辑操作
      console.error(err);
    })
  },

  // 手动对敏感词检测
  _hasSensitiveWords(str) {
    if (str == '' || str == 'undefined') return false;
    if (g_reg.test(str)) { // 如果检测有违规,就返回true
      return true;
    }
  }

})

而wxml只是新增加了一个字段hasSensitiveWords而已,这里只是用于学习演示

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!--pages/msgSecCheck/msgSecCheck.wxml-->
<view class="container">
  <textarea class="content" placeholder="写点文字..." bindinput="onInput" auto-focus bindfocus="onFocus" bindblur="onBlur">
  </textarea>
</view>
<view>
    {{ hasSensitiveWords }}
</view>

<view class="footer">
  <button class="send-btn" size="default" bind:tap="send">发布</button>
</view>

(敏感词测试校验)

当然上面代码中显示的是,但凡遇到违规之类的词,就用*处理的,如果您想要出现多少个违规词,就具体用多少个特殊符号处理也是可以的

但是我个人觉得没有必要,出现多少个违规词就用多少个特殊符号代替的,对于敏感违规内容,要么你不让用户输入,要么就用几个特殊符号代替就可以了的

如果出现N多个违规词,就要出现N多个特殊符号,这显然是很浪费资源,占用公共空间的

在插入数据库之前,通过前端弱校验以及接口的强校验,对内容进行检测,若内容合规,就插入数据库,不合规,就不让走下一步的

对于违规词的手动收集,其实也是可以单独的弄一个接口的,在小程序端哪里需要检验的,哪里触发事件,就在哪里发起请求就可以的

对于涉及到复杂的页面,若很多个模块涉及到用户自发表内容,那么是可以弄一个前端弱校验敏感接口的,一方面是方便运营人员,手动进行添加特殊敏感词汇,另一方面是不用频繁动代码

如果使用了接口,那么就增加了API的请求,体验流畅性就会降低,因为请求接口,是需要时间的

如果把违规词收集写死放在小程序端,这种方式是不会请求API的,两种方式各有利弊 适合自己的业务才是最好的

不过在大型的项目里,若软件应用要求比较高,一般都是支持运营人员手动可以添加和删除敏感词汇的,类似下面这样的,形成一个闭环

(违规自定义文本增删操作)

03

云调用方式的优点

通过上面云调用方式,在云函数中进行简单的配置一下,就可以完成在小程序端文本内容的安全校验,是不是觉得超级方便,简单呢?

云调用是云开发提供的基于云函数使用小程序开放接口的能力,目前已经覆盖以下几个使用场景

  • 服务端调用
  • 开放数据调用
  • 消息推送

具体详细介绍,您可以前往小程序官方文档阅读

云调用需要在云函数中通过 wx-server-sdk使用。在云函数中使用云调用调用服务端接口无需换取access_token,只要是在从小程序端触发的云函数中发起的云调用都会经过微信自动鉴权

您会发现通过云调用的方式,实现同样一个功能,不需要知道APPID,以及APPSECRET秘钥,也不需要获取access_token,这样简直太方便了,没有几行代码

其实复杂的内部工作,都已经集成到wx-server-sdk当中了的,您只需要根据云开发官方内置的接口,传入所需要检测的字段,它就会给您返回一个结果

您只需要专注你自己业务开发就可以了

这就是云开发魅力所在,当然前一种方式,https的方式,获取access_Token之类的,也是要会的,如果后台用的不是云开发模式,有自己的后端服务,那么就要走https那一套流程了

结语

THE END

本文主要介绍了在小程序云开发中,使用云调用的方式实现了对文本内容安全的校验,涉及到在云函数端进行config.json进行配置一下,在主入口index.js中写几行云函数JS代码,就可以完成一个文本内容安全校验的功能

当然也提到了,在小程序端进行敏感文本的弱校验,具体的时机是在失去焦点的时候,就进行文本的内容的弱校验

以及当遇到敏感词汇时,进行特殊符号处理,最后就是感受到了云开发带来的方便,这种无服务serverless开发方式,将会越来越流行 你只需专注自己业务开发就可以,很多复杂的内部工作,云开发团队都已经帮你解决了的

至于图片内容安全校验,限于篇幅所致,放在下一节介绍

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-05-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 itclanCoder 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【愚公系列】《微信小程序与云开发从入门到实践》051-天气预报小程序的开发(数据准备)
随着智能手机的普及和小程序生态的快速发展,天气预报小程序逐渐成为人们生活中获取天气信息的重要工具。用户希望随时随地了解最新的天气状况,以便更好地安排出行和日常活动。然而,要开发一款高质量的天气预报小程序,数据的准备和处理至关重要。
愚公搬代码
2025/01/29
1220
做好内容安全检测,和风险说「再见」!(下)
随笔川迹: 一个靠前排的90后具有情怀的技匠,路上正追逐斜杠青年的践行者,人人领读发起人。
腾讯云开发TCB
2020/06/03
1.2K0
做好内容安全检测,和风险说「再见」!(上)
随笔川迹: 一个靠前排的90后具有情怀的技匠,路上正追逐斜杠青年的践行者,人人领读发起人。
腾讯云开发TCB
2020/06/03
1.4K0
小程序-云开发-如何对敏感词进行过滤即内容安全的检测(上)
无论是小程序还是自行开发的一些类似社交,带有用户自行产生内容的软件应用,例如:即时通讯,社群,论坛,音视频直播等,对于接入内容安全的检测是非常有必要的
itclanCoder
2020/10/28
3.8K0
小程序-云开发-如何对敏感词进行过滤即内容安全的检测(上)
微信小程序内容安全检测(敏感词、敏感图)
推荐使用 EasyWechat: https://www.easywechat.com/docs/4.x/basic-services/content_security
很酷的站长
2023/01/02
5.8K0
微信小程序内容安全检测(敏感词、敏感图)
小程序中敏感词过滤——前端实现
知晓程序员,专注小程序开发的程序员! 小程序内容如果含有淫秽色情、涉违法犯罪、涉政有害等不良信息,将会被微信强制下架小程序。 因此,微信官方也推出了内容安全接口,文档地址:https://developers.weixin.qq.com/miniprogram/dev/api/msgSecCheck.html 在些之前,有些开发者也使用过第三方的内容安全接口,比如网易易盾、阿里云内容检测API、百度AI内容审核,这些都是收费的,主要针对企业用户。 因此,官方推出此内容安全接口后,算是对开发者的一种福利。
连胜
2018/06/06
8.6K0
用小程序·云开发打造运动圈小程序丨实战
和朋友合伙写了一个小程序,写了一个以共享乒乓信息和交流的平台———乒乓圈。我们使用了微信的云开发来完成数据和后台的作用。免去了租赁服务器。
腾讯云开发TCB
2019/09/04
1.8K0
微信小程序--关于加快小程序开发的几个小建议
​ 按照我们平常的开发习惯,创建一个新的页面,一般都会先创建文件夹,再创建对应page的形式,创建完成后,app.json中会自动注册该页面。实际上,我们还可以通过直接在app.json中注册页面来生成对应的page。
Kindear
2020/12/29
5770
小程序云开发全套实战教程(最全)
在学习云开发的时候将自己的学习过程记录下来了,放在了网上,收获了一波好评,今天下午在办公室没有事情,也发现之前有人在博客里面评论,你这个教程还有一半哩,可能是csdn的自动搬运功能出来一点小问题,没有搬运成功吧,这里就手动复制粘贴成为一篇了,篇幅比较长,如果有不足或者不注意写错的地方,欢迎大家提出纠正哦。
王小婷
2019/01/28
16.2K2
实战丨如何制作一个完整的外卖微信小程序开发项目(已开源)
一开始项目并非基于云开发而开发的,目前考虑用云开发,因此,需要在项目中开启云开发的相关选项。
腾讯云开发TCB
2020/07/29
4.3K0
实战丨如何制作一个完整的外卖微信小程序开发项目(已开源)
小程序-云开发-实现微信云支付功能
对于支付下单在小程序当中是一个非常重要的功能,在未接入云支付之前,想要实现一个支付下单的功能,借助微信官方提供的wx.requestPayment()这个接口,发起微信支付
itclanCoder
2020/10/28
10.7K1
小程序-云开发-实现微信云支付功能
借助云开发实现小程序的登陆注册功能
云开发的知识我讲过很多遍了,还不知道云开发是啥的同学可以翻看下我历史文章,或者看下我录制的云开发基础入门视频:《5小时零基础入门小程序云开发》
编程小石头
2019/12/09
2.8K0
借助云开发实现小程序的登陆注册功能
微信小程序--聊天室小程序(云开发)
从微信小程序开发社区更新watch接口之后,一直在构思这个项目。项目已经完成很久,但是一直都没有空写一篇博客记录展示一下。
Kindear
2021/09/09
5.9K0
【玩转腾讯云】手摸手带你利用云函数轻松实现一个热点资讯小程序
打开微信小程序开发IDE,创建一个小程序项目,AppID需要自己去小程序官网注册一个,然后后端服务注意选择小程序-云开发。
老码小张
2020/04/05
2.5K3
【玩转腾讯云】手摸手带你利用云函数轻松实现一个热点资讯小程序
微信小程序--云开发支付闭环
云开发支付流程闭环 extends 微信小程序--使用云开发完成支付闭环 在上述文章中,我们对支付结果的处理更多依赖于小程序端的操作 订单号存储在小程序端 支付结果采用小程序端定时触发器轮询
Kindear
2021/06/10
4.1K0
微信小程序--云开发支付闭环
[猫头虎分享21天微信小程序基础入门教程]第16天:小程序的云开发与数据库操作
大家好,我是猫头虎,一名全栈软件工程师。今天我们继续微信小程序的学习,重点了解如何使用云开发功能进行数据库操作。云开发是微信小程序提供的一项强大功能,可以帮助你快速构建和部署后端服务,无需自行搭建服务器。🚀
猫头虎
2024/05/28
3130
小程序云开发实战 - 口袋工具之“历史上的今天”
本文选取项目中的一个页面 -- 历史上的今天 来做一个云开发的分享,会涉及云函数和云数据库。
腾讯云开发TCB
2019/07/29
7450
小程序云开发实战 - 口袋工具之“历史上的今天”
【实战】小程序云开发,云函数中使用Router(附源码)
最近在做自己的小程序《看啥好呢》,这个小程序是使用云开发的方式开发的,功能特别简单,就是获取豆瓣、大麦网的数据展示,虽然功能简单,但还是记录下开发过程和一些技术点,大约会有两篇博文产出,这是第二篇。GitHub地址
张张
2019/12/23
1.2K0
【实战】小程序云开发,云函数中使用Router(附源码)
颠覆认知!这些小程序云开发技巧,让后端开发难度直降 90%
嘿,各位开发小伙伴们!在这个代码如繁星般闪烁的时代,小程序开发已经成为了咱技术人的 “必争之地”。你是不是还在为小程序后端开发那些复杂的事儿头疼不已?服务器配置、数据库搭建、接口开发…… 每一项都像一座小山,压得人喘不过气来。但是!今天小编要给大家带来一个超级大福利,掌握了这些小程序云开发技巧,后端开发难度瞬间直降 90%,让你轻松跨越这些 “小山”,一路飞奔向前。
小白的大数据之旅
2025/03/18
930
用云开发CloudBase,实现小程序多图片内容安全检测
随笔川迹: 一个靠前排的90后具有情怀的技匠,路上正追逐斜杠青年的践行者,人人领读发起人。
腾讯云开发TCB
2020/06/09
1.4K0
推荐阅读
相关推荐
【愚公系列】《微信小程序与云开发从入门到实践》051-天气预报小程序的开发(数据准备)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验