我有一个网站,用户内容需要在发布之前进行过滤(评论等)。目前我有一个系统,扫描会在单词列表中发布内容,然后用星号替换这些单词。
这适用于单个单词,但我现在正在寻找替换单词序列而我有点迷失。
对于示例,我们将使用PayPal。目前我的正则表达式找到并替换了这个罚款,但是如果我想搜索并替换'Pay Pal'则不然。这是我的替换代码,适用于目前为止的单个单词:
$word = $words->word;
$length = strlen($word);
$replacement = str_repeat('*', $length);
$newContent = preg_replace('/\b'.$word.'\b/i', $replacement, $content);
所以我需要用' * * '代替'pay pal'。
理想情况下,空间将是一个通配符来拾取诸如'pay_pal'之类的东西,但这只是一件好事。
我玩过但无济于事。
澄清一下 - 如何修改它以替换两个单词以及一个单词?
答案 0 :(得分:0)
$newContent = preg_replace('/\b'.$word.'\b/i', $replacement, $content);
那很糟糕。真的,非常糟糕。这就像坐直升机去离家20米远的地方购物一样。
对于完全固定的文本块,请使用str_replace()
。
$newContent = str_replace($word, $replacement, $content);
// If you want it to be surrounded with spaces use the one below:
$newContent = str_replace(" $word ", $replacement, $content);
对于更复杂的“PayPal”,我建议您以“Pay * Pal”或其他方式存储。例如:
$badWord = 'Pay*Pal';
$pattern = '~\b'.str_replace('*','.?',$badWord).'\b~Ui';
// dont use 'i' flag if you want it case-sensitive
$newContent = preg_replace($pattern, $replacement, $content);