当前位置:首页 > PHP

php实现敏感词过滤

2026-02-27 19:54:49PHP

使用正则表达式匹配敏感词

将敏感词存储为数组,通过正则表达式构建匹配模式。使用preg_replace函数替换敏感词为指定字符(如*)。

$sensitiveWords = ['敏感词1', '敏感词2', '测试'];
$pattern = '/(' . implode('|', array_map('preg_quote', $sensitiveWords)) . ')/i';
$text = "这是一段包含敏感词1和测试的文字";
$filteredText = preg_replace($pattern, '*', $text);

使用Trie树提高检测效率

对于大量敏感词场景,构建Trie树数据结构实现高效匹配。需自定义Trie类实现插入和搜索方法,遍历文本时进行多模式串匹配。

php实现敏感词过滤

class TrieNode {
    public $children = [];
    public $isEnd = false;
}

class SensitiveWordFilter {
    private $root;

    public function __construct() {
        $this->root = new TrieNode();
    }

    public function addWord($word) {
        $node = $this->root;
        for ($i = 0; $i < mb_strlen($word); $i++) {
            $char = mb_substr($word, $i, 1);
            if (!isset($node->children[$char])) {
                $node->children[$char] = new TrieNode();
            }
            $node = $node->children[$char];
        }
        $node->isEnd = true;
    }

    public function filter($text) {
        $result = [];
        $length = mb_strlen($text);
        for ($i = 0; $i < $length; $i++) {
            $node = $this->root;
            $j = $i;
            while ($j < $length) {
                $char = mb_substr($text, $j, 1);
                if (!isset($node->children[$char])) break;
                $node = $node->children[$char];
                if ($node->isEnd) {
                    $result[] = mb_substr($text, $i, $j - $i + 1);
                    $i = $j;
                    break;
                }
                $j++;
            }
        }
        return str_replace($result, '*', $text);
    }
}

结合数据库存储敏感词

将敏感词存储在数据库表中,定期更新缓存。使用文件缓存或内存缓存(如Redis)存储加载的敏感词列表,避免频繁查询数据库。

php实现敏感词过滤

// 从数据库加载敏感词示例
$pdo = new PDO('mysql:host=localhost;dbname=test', 'user', 'password');
$stmt = $pdo->query("SELECT word FROM sensitive_words");
$words = $stmt->fetchAll(PDO::FETCH_COLUMN);

// 使用APCu缓存
if (!apcu_exists('sensitive_words')) {
    apcu_store('sensitive_words', $words, 3600);
}
$cachedWords = apcu_fetch('sensitive_words');

处理中英文混合场景

针对多语言场景,使用mb_系列函数处理多字节字符。对英文单词进行边界检测避免误匹配(如"ass"不应匹配"class"中的"ass")。

function filterMixedText($text, $words) {
    $pattern = '/(?<!\w)(' . implode('|', array_map('preg_quote', $words)) . ')(?!\w)/iu';
    return preg_replace($pattern, '[censored]', $text);
}

实现分级过滤机制

根据敏感程度将词汇分为不同级别,采用不同处理策略。可在替换时记录日志供后续分析,对高风险词汇直接阻断内容提交。

$level1 = ['暴力词汇'];
$level2 = ['轻度敏感词'];
$text = "包含暴力词汇的内容";

if (preg_match('/'.implode('|', $level1).'/', $text)) {
    header('HTTP/1.1 403 Forbidden');
    exit('内容包含禁止使用的词汇');
} else {
    $filtered = preg_replace('/'.implode('|', $level2).'/', '', $text);
}

标签: 敏感php
分享给朋友:

相关文章

php实现打印功能

php实现打印功能

PHP 实现打印功能的方法 PHP 可以通过多种方式实现打印功能,具体取决于打印的目标(如打印机、PDF、网页等)和需求(如直接打印、生成打印预览等)。以下是几种常见的实现方式: 使用 JavaSc…

git php实现

git php实现

Git 与 PHP 的集成实现 使用 PHP 执行 Git 命令 通过 PHP 的 exec()、shell_exec() 或 passthru() 函数可以直接调用 Git 命令,适用于服务器端操作…

php无限分类的实现

php无限分类的实现

PHP无限分类的实现 无限分类是一种常见的树形结构数据组织方式,适用于商品分类、菜单管理、地区选择等场景。以下是几种实现方法: 递归实现法 递归是最直观的实现方式,通过函数自身调用来遍历子分类。数据…

php实现验证码的识别

php实现验证码的识别

验证码识别的基本方法 验证码识别通常分为手动实现和第三方工具两种方式。手动实现需要图像处理和机器学习知识,而第三方工具则更快捷。 使用Tesseract OCR识别验证码 Tesseract是一个开…

排序算法 php实现

排序算法 php实现

以下是用PHP实现的常见排序算法,每种算法均附示例代码和简要说明: 冒泡排序 通过重复比较相邻元素并交换位置实现排序: function bubbleSort($arr) { $n = c…

php实现获取验证码

php实现获取验证码

使用GD库生成验证码 在PHP中,可以通过GD库来生成验证码图片。以下是一个简单的实现示例: <?php session_start(); $width = 120; $height = 40…