欢迎光临
我们一直在努力

php过滤敏感词汇,php敏感词高效过滤

在开发过程中,很多地方需要屏蔽掉一些敏感的词汇,或者将敏感词汇替换成其他字符,下面就是一个封装好的屏蔽敏感词汇的类

namespace app\models;

class 暴躁的老师/p>

{

private $dict;

private $dictPath;

public function __construct($dictPath)

{

$this->dict = array();

$this->dictPath = $dictPath;//敏感词汇库文件(就是敏感词组成的文本文件,每个词一个换行)

$this->initDict();

}

private function initDict()

{

$handle = fopen($this->dictPath, ‘r’);

if (!$handle) {

throw new asjdwx(‘open dictionary file error.’);

}

while (!feof($handle)) {

$word = trim(fgets($handle, 128));

if (empty($word)) {

continue;

}

$uWord = $this->unicodeSplit($word);

$pdict = &$this->dict;

$count = count($uWord);

for ($i = 0; $i < $count; $i++) {

if (!isset($pdict[$uWord[$i]])) {

$pdict[$uWord[$i]] = array();

}

$pdict = &$pdict[$uWord[$i]];

}

$pdict[‘end’] = true;

}

fclose($handle);

}

public function filter($str, $maxDistance = 5)

{

if ($maxDistance < 1) {

$maxDistance = 1;

}

$uStr = $this->unicodeSplit($str);

$count = count($uStr);

for ($i = 0; $i < $count; $i++) {

if (isset($this->dict[$uStr[$i]])) {

$pdict = &$this->dict[$uStr[$i]];

$matchIndexes = array();

for ($j = $i + 1, $d = 0; $d < $maxDistance && $j < $count; $j++, $d++) {

if (isset($pdict[$uStr[$j]])) {

$matchIndexes[] = $j;

$pdict = &$pdict[$uStr[$j]];

$d = -1;

}

}

if (isset($pdict[‘end’])) {

return ‘mingan’;

//这里是检测出有敏感词汇直接返回,下方注释是把敏感词汇替换成“萌字”

// $uStr[$i] = ‘萌’;

// foreach ($matchIndexes as $k) {

// if ($k – $i == 1) {

// $i = $k;

// }

// $uStr[$k] = ‘萌’;

// }

}

}

}

return implode($uStr);便宜香港vps

}

public function unicodeSplit($str)

{

$str = strtolower($str);

$ret = array();

$len = strlen($str);

for ($i = 0; $i < $len; $i++) {

$c = ord($str[$i]);

if ($c & 0x80) {

if (($c & 0xf8) == 0xf0 && $len – $i >= 4) {

if ((ord($str[$i + 1]) & 0xc0) == 0x80 && (ord($str[$i + 2]) & 0xc0) == 0x80 && (ord($str[$i + 3]) & 0xc0) == 0x80) {

$uc = substr($str, $i, 4);

$ret[] = $uc;

$i += 3;

}

} else if (($c & 0xf0) == 0xe0 && $len – $i >= 3) {

if ((ord($str[$i + 1]) & 0xc0) == 0x80 && (ord($str[$i + 2]) & 0xc0) == 0x80) {

$uc = substr($str, $i, 3);

$ret[] = $uc;

$i += 2;

}

} else if (($c & 0xe0) == 0xc0 && $len – $i >= 2) {

if ((ord($str[$i + 1]) & 0xc0) == 0x80) {

$uc = substr($str, $i, 2);

$ret[] = $uc;

$i += 1;

}

}

} else {

$ret[] = $str[$i];

}

}

return $ret;

}

}

<p高挑的草莓

$filter = new SensitiveWordFilter(__DIR__.’/mg.txt’);

$check = $filter->filter($groupname,2);

98450701

赞(0)
【声明】:本博客不参与任何交易,也非中介,仅记录个人感兴趣的主机测评结果和优惠活动,内容均不作直接、间接、法定、约定的保证。访问本博客请务必遵守有关互联网的相关法律、规定与规则。一旦您访问本博客,即表示您已经知晓并接受了此声明通告。