当前位置:首页 > 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_系列函数:

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

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

php实现敏感词过滤

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

相关文章

php实现分页

php实现分页

PHP实现分页的基本方法 使用LIMIT和OFFSET进行数据库查询分页。通过计算当前页码和每页显示数量,动态生成SQL语句。 $page = isset($_GET['page']) ? (int…

php实现websocket

php实现websocket

PHP 实现 WebSocket WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议。PHP 可以通过多种方式实现 WebSocket 功能,以下是几种常见的方法: 使用 Rat…

php 实现购物车

php 实现购物车

PHP 实现购物车功能 购物车功能是电子商务网站的核心部分,可以通过 PHP 和 Session 或数据库来实现。以下是两种常见的实现方式: 使用 Session 存储购物车数据 Sessi…

php实现接口

php实现接口

PHP 实现接口的方法 在 PHP 中,接口(Interface)用于定义一组方法的规范,而不实现具体功能。类可以实现一个或多个接口,并必须实现接口中定义的所有方法。 定义接口 接口使用 inte…

php无限分类的实现

php无限分类的实现

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

php 实现秒杀

php 实现秒杀

PHP 实现秒杀的关键技术 秒杀系统需要解决高并发、超卖、性能瓶颈等问题。以下是实现秒杀的核心方案: 使用 Redis 预减库存 将商品库存提前加载到 Redis 中,通过原子操作保证库存准确性:…