当前位置:首页 > 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树是更高效的解决方案:

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];
                $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

安装示例:

php实现敏感词过滤

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_系列函数:

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

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

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

相关文章

php实现搜索功能

php实现搜索功能

实现基本的搜索功能 在PHP中实现搜索功能通常涉及数据库查询。以下是一个简单的实现方式,假设使用MySQL数据库: <?php // 连接数据库 $conn = new mysqli('loc…

php实现mysql

php实现mysql

PHP 连接 MySQL 的基本方法 PHP 提供了多种方式与 MySQL 数据库进行交互,以下是最常用的几种方法。 使用 MySQLi 扩展 MySQLi 是 MySQL 的改进扩展,支持面向对…

php实现计算器

php实现计算器

基本计算器实现 使用PHP创建一个简单的计算器可以通过HTML表单接收用户输入,PHP处理计算逻辑。以下是一个基础实现示例: HTML表单部分 (calculator.html) <form…

php实现登陆功能

php实现登陆功能

创建数据库表 设计用户表存储登录信息,通常包含字段如 id、username、password(需哈希加密)、email 等。示例 SQL: CREATE TABLE users ( i…

php登陆注册功能实现

php登陆注册功能实现

数据库设计 创建用户表存储用户信息,至少包含用户名、密码(需加密)、邮箱等字段。示例SQL: CREATE TABLE users ( id INT AUTO_INCREMENT PRIMA…

php怎么实现分页

php怎么实现分页

实现分页的基本步骤 在PHP中实现分页通常需要结合数据库查询和前端展示。以下是常见的实现方法: 数据库查询部分 使用SQL的LIMIT子句限制返回的记录数: SELECT * FROM table…