当前位置:首页 > PHP

php实现敏感词过滤

2026-01-28 22:51:36PHP

PHP实现敏感词过滤的方法

敏感词过滤是网站开发中常见的需求,以下介绍几种PHP实现敏感词过滤的方法:

使用字符串替换函数

$content = "这是一段包含敏感词的文本";
$sensitiveWords = ["敏感词", "不良词"];
$replacement = "*";

$filteredContent = str_replace($sensitiveWords, $replacement, $content);

这种方法简单直接,适合少量敏感词的情况。

使用正则表达式匹配

$content = "这是一段包含敏感词的文本";
$pattern = '/敏感词|不良词|违禁词/i';
$replacement = "*";

$filteredContent = preg_replace($pattern, $replacement, $content);

正则表达式方法效率更高,适合大量敏感词的情况。

使用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;
        $len = mb_strlen($word);

        for ($i = 0; $i < $len; $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, $replaceChar = '*') {
        $result = [];
        $len = mb_strlen($text);

        for ($i = 0; $i < $len; $i++) {
            $node = $this->root;
            $j = $i;

            while ($j < $len) {
                $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, $replaceChar, $text);
    }
}

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

使用第三方库

可以考虑使用现成的敏感词过滤库,如:

  1. lustre/php-sensitive:一个高性能的敏感词过滤库
  2. fuzzdb:提供大量敏感词数据集

安装示例:

composer require lustre/php-sensitive

使用示例:

use Lustre\Sensitive\SensitiveWordFilter;

$filter = new SensitiveWordFilter();
$filter->addWords(['敏感词', '不良词']);
$text = "这是一段包含敏感词的文本";
echo $filter->filter($text, '*');

性能优化建议

  • 将敏感词库缓存到内存中,避免每次请求都重新加载
  • 对长文本采用分段处理
  • 考虑使用AC自动机算法处理更复杂的匹配需求
  • 定期更新敏感词库

注意事项

php实现敏感词过滤

  • 处理中文时确保使用mb_系列函数
  • 考虑大小写敏感问题
  • 注意处理特殊字符和空格
  • 对用户输入进行必要的转义

以上方法可以根据实际项目需求选择或组合使用,对于高并发场景建议使用专门的服务或扩展来实现敏感词过滤功能。

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

相关文章

php实现栈

php实现栈

栈的基本概念 栈(Stack)是一种遵循后进先出(LIFO)原则的数据结构。核心操作包括: push:元素入栈。 pop:元素出栈(返回并移除栈顶元素)。 peek:查看栈顶元素…

php 登录实现

php 登录实现

PHP 登录实现 PHP 登录功能通常包括用户认证、会话管理和安全性措施。以下是实现 PHP 登录功能的关键步骤。 数据库准备 创建一个用户表存储用户信息,通常包括用户名、密码(加密存储)和其他必要…

php怎么实现登录功能

php怎么实现登录功能

数据库准备 创建用户表存储登录信息,通常包括用户名、密码(需加密)等字段。示例SQL: CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY…

php实现apk下载

php实现apk下载

实现APK下载的PHP代码 创建一个简单的PHP脚本来处理APK文件的下载请求,确保文件传输正确且安全。 <?php $file = 'path/to/your/app.apk'; if (f…

php实现评论功能

php实现评论功能

数据库设计 创建评论表(示例结构): CREATE TABLE `comments` ( `id` int(11) NOT NULL AUTO_INCREMENT, `user_id`…

php下载文件实现

php下载文件实现

PHP 下载文件实现方法 使用 header() 函数强制下载 设置合适的 HTTP 头信息,强制浏览器下载文件而非直接打开。 $file_path = '/path/to/file.pdf'; $…