当前位置:首页 > PHP

php实现敏感词过滤

2026-02-13 20:59:50PHP

PHP实现敏感词过滤的方法

敏感词过滤是Web开发中常见的需求,PHP可以通过多种方式实现。以下是几种常用方法:

使用str_replace函数进行简单替换

$sensitiveWords = ['敏感词1', '敏感词2', '敏感词3'];
$replacement = '*';
$content = "这是一段包含敏感词1和敏感词2的文本";
$filteredContent = str_replace($sensitiveWords, $replacement, $content);

这种方法简单直接,适合小规模敏感词库,但性能随敏感词数量增加而下降。

使用正则表达式匹配

$pattern = '/敏感词1|敏感词2|敏感词3/i';
$content = "这是一段包含敏感词1和敏感词2的文本";
$filteredContent = preg_replace($pattern, '*', $content);

正则表达式方法效率更高,适合中等规模的敏感词库,模式中的i修饰符使匹配不区分大小写。

使用Trie树数据结构

对于大规模敏感词库,Trie树是更高效的解决方案:

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];
                $j++;
                if ($node->isEnd) {
                    $result .= str_repeat('*', $j - $i);
                    $i = $j - 1;
                    break;
                }
            }
            if ($j == $i) {
                $result .= mb_substr($text, $i, 1);
            }
        }
        return $result;
    }
}

// 使用示例
$filter = new SensitiveWordFilter();
$filter->addWord('敏感词1');
$filter->addWord('敏感词2');
$text = "这是一段包含敏感词1和敏感词2的文本";
echo $filter->filter($text);

Trie树方法适合大规模敏感词库,具有较高的匹配效率。

使用第三方库

可以考虑使用成熟的第三方库如:

  • lustre/php-sensitive-words
  • yankewei/php-sensitive

安装示例:

composer require lustre/php-sensitive-words

使用示例:

require 'vendor/autoload.php';

$filter = new \Lustre\SensitiveWords\SensitiveWords();
$filter->addWords(['敏感词1', '敏感词2']);
$text = "这是一段包含敏感词1和敏感词2的文本";
echo $filter->filter($text, '*');

性能优化建议

对于高频访问场景,建议:

  • 将敏感词库缓存到Redis等内存数据库中
  • 使用AC自动机算法替代简单Trie树
  • 对长文本采用分块处理策略

多字节字符处理

处理中文等多字节字符时,务必使用mb_系列函数:

php实现敏感词过滤

mb_internal_encoding('UTF-8');
$length = mb_strlen($text);
$char = mb_substr($text, $i, 1);

以上方法可根据实际需求选择或组合使用,大规模应用建议采用Trie树或第三方库方案。

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

相关文章

php实现过程

php实现过程

PHP 实现过程 PHP 是一种广泛使用的服务器端脚本语言,特别适合 Web 开发。以下是 PHP 实现过程的关键步骤和注意事项。 安装与配置 下载并安装 PHP,可以从官方 PHP 网站获取最新版…

php实现抽奖程序

php实现抽奖程序

PHP实现抽奖程序 基本抽奖逻辑 创建一个简单的抽奖程序需要定义奖品、中奖概率及随机选择逻辑。以下是一个基础实现示例: <?php // 奖品配置(奖品名称 => 概率) $prizes…

php实现des加密

php实现des加密

DES 加密实现方法 在 PHP 中实现 DES 加密可以通过内置的 mcrypt 或 openssl 扩展完成。由于 mcrypt 已在 PHP 7.2 中废弃,推荐使用 openssl 扩展。…

php树形菜单的实现

php树形菜单的实现

PHP树形菜单的实现方法 实现树形菜单通常涉及数据库设计、数据查询和前端展示三个部分。以下是几种常见的实现方式: 邻接列表模型(Adjacency List) 这是最简单的树形结构存储方式,每个节点…

php 实现定时任务

php 实现定时任务

PHP 实现定时任务的方法 PHP 本身是脚本语言,通常需要借助外部工具或框架来实现定时任务。以下是几种常见的实现方式: 使用 Cron 任务 Cron 是 Linux 系统的定时任务工具,可以定期…

php实现验证码识别

php实现验证码识别

PHP 验证码识别方法 使用 Tesseract OCR 进行识别 Tesseract 是一个开源的 OCR 引擎,可以用于识别验证码。需要先安装 Tesseract 并配置 PHP 扩展。 安装…