解析字符串 - 从字符串中删除一些单词

时间:2013-02-17 07:38:33

标签: php string replace

我有一个字符串:

$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替换为***,因为它还包含过滤后的单词(文本)。

我怎么能做到这一点?

由于

2 个答案:

答案 0 :(得分: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;

输出(Demo):

Hello this is my *** and ***

请注意,首先要记住最大的单词,并且在str_replace处于该模式时请记住,它会在另一个之后进行一次替换 - 就像在循环中一样。所以较短的单词 - 如果更早 - 可以成为较大单词的一部分。

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

答案 1 :(得分:2)

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

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