1、直接上代码:

<?php
//定义编码
header( 'Content-Type:text/html;charset=utf-8 '); $words=array('我','你','他');
$content="测一测我是不是违禁词";
$banned=generateRegularExpression($words);
//检查违禁词
$res_banned=check_words($banned,$content);
write_html($content,$res_banned); /**
* @describe 数组生成正则表达式
* @param array $words
* @return string
*/
function generateRegularExpression($words)
{
$regular = implode('|', array_map('preg_quote', $words));
return "/$regular/i";
}
/**
* @describe 字符串 生成正则表达式
* @param array $words
* @return string
*/
function generateRegularExpressionString($string){
$str_arr[0]=$string;
$str_new_arr= array_map('preg_quote', $str_arr);
return $str_new_arr[0];
}
/**
* 检查敏感词
* @param $banned
* @param $string
* @return bool|string
*/
function check_words($banned,$string)
{ $match_banned=array();
//循环查出所有敏感词 $new_banned=strtolower($banned);
$i=0;
do{
$matches=null;
if (!empty($new_banned) && preg_match($new_banned, $string, $matches)) {
$isempyt=empty($matches[0]);
if(!$isempyt){
$match_banned = array_merge($match_banned, $matches);
$matches_str=strtolower(generateRegularExpressionString($matches[0]));
$new_banned=str_replace("|".$matches_str."|","|",$new_banned);
$new_banned=str_replace("/".$matches_str."|","/",$new_banned);
$new_banned=str_replace("|".$matches_str."/","/",$new_banned);
}
}
$i++;
if($i>20){
$isempyt=true;
break;
}
}while(count($matches)>0 && !$isempyt); //查出敏感词
if($match_banned){
return $match_banned;
}
//没有查出敏感词
return array();
} /**
* 打印到页面上
* @param $filepath
* @param $res_mingan
* @param $res_banned
*/
function write_html($content,$res_banned){ print_r($content);
if($res_banned){
print_r(" <font color='red'>违禁词(".count($res_banned)."):</font>".implode('|',$res_banned));
}
echo "<br>"; }
 
 

【php】(转载)分享一个好用的php违禁词 处理类的更多相关文章

  1. 分享一个自己用的Objective-C的Http接连类

    很久没有更新博客了,所以分享一个. @protocol HttpListenerDelegate; @interface BaseHttp : NSObject { } @property (nona ...

  2. 转载——分享一个html+js+ashx+easyui+ado.net权限管理系统

    EasyUI.权限管理 这是个都快被搞烂了的组合,但是easyui的确好用,权限管理在项目中的确实用.一直以来博客园里也不少朋友分享过,但是感觉好的要不没源码,要不就是过度设计写的太复杂看不懂,也懒得 ...

  3. 推荐分享一个牛X的自定义PHP加密解密类

    通俗点说,用它来进行加密,同一个字符串,每次进行加密,得出的结果都是不一样的,大大加强了数据安全性.同时还可设定加密后数据的有效期,简直牛掰了 #食用方法 将下面的第二份模块代码保存为 Mcrypt. ...

  4. 分享一个SQLSERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间)

    分享一个SQLSERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间) 很多时候我们都需要计算数据库中各个表的数据量和每行记录所占用空间 这里共享一个脚本 CREATE TABLE #tab ...

  5. 转载分享----一线交付眼中的为何"项目总是迟迟无法交付”

    当初博主在一线交付BOSS系统中承担过TC角色 交付的路途很艰辛,加班到10点多或1点多第二天8点上班,还有通宵的日子 还有无数个问题从开始到关闭的周期,各种催人,各种掐架拉会,各种被甲方嫌弃 看到这 ...

  6. Git.Framework 框架随手记-- 分享一个"比较垃圾"的项目

    本文主要分享一个Git.Framework 开发的一个项目的部分源码,此项目代码"比较垃圾",所以请各位码农,码畜,码神,码圣勿喷!发此文只为记录工作问题以及分享问题! 一. 项目 ...

  7. 分享一个开源的网盘下载工具BaiduPCS-Go

    大家在使用网盘的时候,一定忍受不了限速下载的速度.今天给大家分享一个开源的网盘下载项目BaiduPCS-Go.Go语言编写,仿 Linux shell 文件处理命令的百度网盘命令行客户端.多平台支持, ...

  8. 分享一个 Java String split 快速分割的方法

    java中string.split() 方法比较强大,但是split()方法采用正则表达式,速度相对会慢一点, 其实大多数场景下并不需要使用正则表达式,下面分享一个不使用正则表达式分隔字符串的方法. ...

  9. C# PDF Page操作——设置页面切换按钮 C# 添加、读取Word脚注尾注 C#为什么不能像C/C++一样的支持函数只读传参 web 给大家分享一个好玩的东西,也许你那块就用的到

    C# PDF Page操作——设置页面切换按钮   概述 在以下示例中,将介绍在PDF文档页面设置页面切换按钮的方法.示例中将页面切换按钮的添加分为了两种情况,一种是设置按钮跳转到首页.下页.上页或者 ...

随机推荐

  1. ElasticSearch客户端注解使用介绍

    The best elasticsearch highlevel java rest api-----bboss 1.ElasticSearch客户端bboss提供了一系列注解 @ESId  用于标识 ...

  2. CSS的50个代码片段

    1.css全局 html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a ...

  3. wget获取整站

    wget -m -e robots=off https://www.baidu.com -m是克隆整个网站,-e robots=off是让wget忽视robots.txt 如果网站有中文路径,最好用以 ...

  4. MODBUS协议整理——功能码简述

    1.Modbus简介——来自维基百科 Modbus是一种串行通信协议,是Modicon于1979年,为使用可编程逻辑控制器(PLC)而发表的.Modbus是工业领域通信协议的业界标准,并且现在是工业电 ...

  5. (C++)关于拷贝构造函数 Copy Constructor

    题目: In which of the following scenarios is a Copy Constructor called or invoked? A.    When no conve ...

  6. 【Eclipse】如何在Eclipse中使用命令行?

    如何在Eclipse中使用命令行? 虽然我们已经有了像 Eclipse 这样高级的 IDE,但是我们有时候也是需要在开发的时候使用 Windows 的命令行,来运行一些独立的程序.在两个程序中切换来切 ...

  7. Android自己定义View之仪表盘

    新建项目,新建DashBoardView继承自View实现OnGlobalLayoutListener接口,并重写OnDraw方法. 使用OnGlobalLayoutListener接口须要重写onG ...

  8. ScrollView嵌套ListView只显示一行解决方案

    在ScrollView里边嵌套了个ListView,后边就发现数据源里好多数据,但ListView只是显示1行. 各种debug,打log,数据什么的都没问题,上网百度了下,发现原来是ScrollVi ...

  9. C#.NET常见问题(FAQ)-如何让文本框textbox内容靠右显示

    对于TextBox,我可以设置Text-Align属性为right,就可以让文字靠右了   对于Label而言,需要修改AutoSize为False,并修改TextAlign为MiddleRight, ...

  10. LintCode: Convert Sorted Array to Binary Search Tree With Minimal Height

    C++ /** * Definition of TreeNode: * class TreeNode { * public: * int val; * TreeNode *left, *right; ...