You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP敏感词过滤:如何拦截含特殊字符的规避行为?

解决方案:检测特殊字符并抛出错误提示

当然可以实现这个需求!针对你遇到的用户用特殊字符拆分敏感词绕过过滤的问题,我们可以轻松实现检测逻辑——不管是检查用户输入内容,还是校验敏感词数组里的项是否包含指定特殊字符,都能做到并抛出明确的错误提示。下面我用JavaScript示例来演示(你可以轻松适配到Python、Java等其他语言):

1. 定义需要检测的特殊字符集合

首先明确要拦截的特殊字符范围,你可以根据实际需求调整这个列表:

// 你要检测的特殊字符集合
const forbiddenChars = ['.', ',', '?', '!', '*', '#'];

2. 编写通用检测函数

写一个可复用的函数,用来判断任意字符串是否包含上述禁止字符:

// 方法1:用数组some方法检测(直观易懂)
function containsForbiddenChars(str) {
  return forbiddenChars.some(char => str.includes(char));
}

// 方法2:用正则表达式检测(处理长字符串效率更高)
function containsForbiddenCharsRegex(str) {
  // 注意转义正则特殊字符,这里我们的集合里没有需要转义的,直接拼接即可
  const regexPattern = `[${forbiddenChars.join('')}]`;
  return new RegExp(regexPattern).test(str);
}

3. 集成到你的业务逻辑中

场景A:检测用户输入内容是否包含特殊字符

把检测逻辑加到用户输入校验流程里,一旦发现特殊字符就抛出错误:

// 你的敏感词过滤数组
const badWordFilter = ['敏感词1', '敏感词2', '敏感词3'];

function validateUserInput(userInput) {
  // 第一步:检查用户输入是否含禁止的特殊字符
  if (containsForbiddenChars(userInput)) {
    throw new Error('输入内容包含禁止使用的特殊字符(如点、逗号、感叹号等),请移除后重试!');
  }

  // 第二步:原有敏感词检测逻辑(保留你原来的过滤规则)
  const hasBadWord = badWordFilter.some(word => userInput.includes(word));
  if (hasBadWord) {
    throw new Error('输入内容包含敏感词,请修改后重试!');
  }

  // 校验通过
  return true;
}

// 使用示例
try {
  validateUserInput('这是测,试内容'); // 包含逗号,触发错误
} catch (error) {
  console.error(error.message); // 输出:输入内容包含禁止使用的特殊字符(如点、逗号、感叹号等),请移除后重试!
}

场景B:检测敏感词数组是否存在带特殊字符的项

如果你需要确保自己维护的敏感词数组里没有特殊字符(避免误判),也可以用同样的函数校验:

function validateBadWordFilter() {
  const invalidWords = badWordFilter.filter(word => containsForbiddenChars(word));
  if (invalidWords.length > 0) {
    throw new Error(`敏感词数组中存在包含特殊字符的项:${invalidWords.join(', ')},请修正后再使用!`);
  }
}

// 使用示例
try {
  validateBadWordFilter();
} catch (error) {
  console.error(error.message);
}

补充优化建议(可选)

如果想进一步防止用户用特殊字符拆分敏感词绕过,还可以先移除用户输入里的特殊字符,再做敏感词检测:

function sanitizeInput(str) {
  // 移除所有禁止的特殊字符
  return str.replace(new RegExp(`[${forbiddenChars.join('')}]`, 'g'), '');
}

// 修改敏感词检测逻辑
const sanitizedInput = sanitizeInput(userInput);
const hasBadWord = badWordFilter.some(word => sanitizedInput.includes(word));

内容的提问来源于stack exchange,提问作者labu77

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:39:34