2016-05-24 3 views
-1

У меня в php массив запрещенных слов.Игнорировать whitespace str_replace PHP

С помощью этого кода я заменить запрещенные слова с * в строке:

foreach ($wordlist as $word) 
if (stripos($str, $word) !== false) 
$str = str_ireplace($word, str_repeat('-*', strlen($word)), $str); 
return $str; 

Проблема заключается в том, что некоторые пользователи добавляют пробелы в словах, так что код не находит их.

Пример:
запрещенное слово: apple
Если я пишу яблоко заменяется *****
Если я пишу п.-п. ЭСП не замещается

Есть ли способ использовать str_ireplace игнорируя пробелы?

+0

Есть несколько способов, чтобы избавиться от пространств от пользовательского ввода, конечно. Вы пытались найти что-то в первую очередь? –

+1

Возможный дубликат [Чтобы разбить пробелы внутри переменной в PHP] (http://stackoverflow.com/questions/1279774/to-strip-whitespaces-inside-a-variable-in-php) –

+2

Это чрезвычайно сложно сделать , если я хочу рассказать миру о моей любви к app1es, яблокам, @pples, лямкам (вы получите картину), вы не можете ожидать, чтобы остановить меня только с помощью кода. Модификация сообщества, вероятно, лучшее решение – Steve

ответ

0

Это то, что я бы, наверное, сделать:

foreach ($wordlist as $word) { 
    //Convert each word to a regex which matches containing spaces (e.g. apple => a\s*p\s*p\s*l\s*e) 
    $regexWord = implode("\s*?",str_split($word)); 
    $str = preg_replace("/".$regexWord."/",str_repeat('-*', strlen($word)), $str); 

} 

Идея заключается в том, чтобы тайному каждое слово в регулярное выражение, которое соответствует слову, даже если он содержит пробелы. Это может быть или не быть хорошей идеей, но это то, что вам, похоже, нужно достичь.

Вы можете управлять персонажами между вашим словом с implode("[list characters]*",str_split($word))

+0

Что такое '$ regexWordList' и что такое' $ wordList' –

+0

@HankyPanky мой плохой, '$ regexWordList' был из чего-то другого, что я пытался. '$ wordlist' - это список, указанный в цикле вопросов. – apokryfos