PHP中的简单过滤器

使用以下功能从用户输入中过滤掉单词。它通过具有要排除的预设单词数组来工作,然后循环遍历此数组,并且每个项目都用于替换文本中该单词的任何实例。正则表达式使用\ b字符类,它代表任何单词边界。这样,您就不会在单词本来就不会被过滤掉的情况下出现中间词。

通过使用preg_replace函数的e,可以在输出中运行PHP函数。在这种情况下,我们计算在替换中找到的字符数,并使用它来创建等长的一串星号(*)。

function filterwords($text){
 $filterWords = array('gosh', 'darn', 'poo');
 $filterCount = sizeof($filterWords);
 for($i=0; $i < $filterCount; $i++) {
  $text = preg_replace('/\b'.$filterWords[$i].'\b/ie',"str_repeat('*',strlen('$0'))",$text);
 }
 return $text;
}

当以下文本通过此功能运行时。

echo filterwords('Darn, I have a mild form of tourettes, poo!');

它产生以下结果。

****, I have a mild form of tourettes, ***!

更新: 因为有人要求我使用来更新此示例preg_replace_callback()。

function filterwords($text){
 $filterWords = array('gosh', 'darn', 'poo');
 $filterCount = sizeof($filterWords);
 for ($i = 0; $i < $filterCount; $i++) {
  $text = preg_replace_callback('/\b' . $filterWords[$i] . '\b/i', function($matches){return str_repeat('*', strlen($matches[0]));}, $text);
 }
 return $text;
}