2

我有一个像这样的字符串:

$text = 'Hello this is my string and texts';

我在数组中有一些不允许的单词:

$filtered_words = array(
            'string',
            'text'
        );

我想用 替换所有过滤后的单词$text***所以我写道:

$text_array = explode(' ', $text);
        foreach($text_array as $key => $value){
            if(in_array($text_array[$key], $filtered_words)){
                $text = str_replace($text_array[$key], '***', $text);
            }
        }
echo $text;

输出:

Hello this is my *** and texts

但我还需要替换为的函数texts***因为它还包含过滤后的单词(文本)。

我怎么能做到这一点?

谢谢

4

2 回答 2

10

您可以立即执行此操作,str_replace支持将数组替换为单个字符串:

$text = 'Hello this is my string and texts';

$filtered_words = array(
    'string',
    'texts',
    'text',
);

$zap = '***';

$filtered_text = str_replace($filtered_words, $zap, $text);

echo $filtered_text;

输出(演示):

Hello this is my *** and ***

请注意您首先拥有最大的单词并记住何时str_replace处于该模式,它将一个接一个地进行替换 - 就像在您的循环中一样。所以较短的词——如果更早的话——可能是大词的一部分。

如果您需要更安全的东西,您必须首先考虑进行文本分析。如果您不知道您可能想要替换但到目前为止您没有想到的单词,这也可以告诉您。

于 2013-02-17T07:46:20.057 回答
2

str_replace可以接受一个数组作为第一个参数。所以根本不需要任何for each循环:

$filtered_words = array(
    'string',
    'text'
);
$text = str_replace($filtered_words, '***', $text);
于 2013-02-17T07:45:47.573 回答