2016-12-05 4 views
-5

Это мой PHP-код для замены плохого слова в строке на *, он работает хорошо.Как проверить, есть ли неправильное слово в строке или нет

Но я хочу проверить, нет ли в строке плохого слова или нет. Как я могу это сделать?

index.php

<?php 
include("badwords.php"); 
$content = "cat bad_word dog"; 
$badword = new badword(); 
echo $badword->word_fliter("$content"); 
?> 

badword.php

<?php 
$bad_words = array (
    // an array of bad words here... 
    ); 

class badword { 
    function word_fliter($content) { 
     global $bad_words, $wordreplace; 
     $count = count($bad_words); 
     for ($n = 0; $n < $count; ++$n, next ($bad_words)) { 
      $filter = "*"; 

      //Search for bad_words in content 
      $search = "$bad_words[$n]"; 
      $content = preg_replace("'$search'i","<i>$filter</i>",$content); 
     } 
     return $content; 
    } 
} 
?> 

.......................... .................................................. .................................................. ..............................

+0

Как вы хотите, чтобы вывод быть и то, что вы пробовали себя? Постарайтесь быть более основательным в своем вопросе и покажите нам, что вы уже сделали. –

+0

Я хочу обнаружить, что моя старая строка имеет плохие слова или нет? –

+0

И что не так с этим кодом? Кажется, работает, https://eval.in/691288. Возможно, вы захотите использовать границы слов, поэтому «стекло» и т. Д. Не будут разделены неправильно. – chris85

ответ

3

Редактировать: Поскольку вам нужен полный код ... обратите внимание, что я изменил имя функции от word_fliter() до word_filter()

index.php

<?php 
include("badwords.php"); 
$content = "this is an example string with bad words in it"; 
$badword = new badword(); 
echo $badword->word_filter("$content"); 
if($badword->usedBadWords()){ 
    // do whatever you want to do if bad words were used 
} 
?> 

badwords.php

<?php 
$bad_words = array (
    // insert your naughty list here 
    ); 

class badword { 
    private $usedBadWords = false; 

    function word_filter($content) { 
     foreach($bad_words as $bad_word){ 
      if(strpos($content, $bad_word) !== false){ 
       $this->usedBadwords = true; 
      } 
      $content = str_replace($bad_word, '***', $content); 
     } 
     return $content; 
    } 

    function usedBadWords(){ 
     return $this->usedBadWords; 
    } 
} 
?> 
+1

Без цикла foreach: '$ content = str_replace ($ bad_words, '***', $ content);'. –

+0

TIL, что str_replaces могут принимать массивы в качестве параметров :) – Cashbee

+0

как применить к моему коду? –

0

Это должно работать, вы просто проверить, если он на content матчи никаких плохих слов и возвращает его.

index.php

<?php 
include("badwords.php"); 
$content = "cat bad_word dog"; 
$badword = new badword(); 
$return_val = $badword->word_fliter("$content"); 
echo $return_val['content']; 
if($return_val['has_bad_words']){ 
    ..do stuff 
} 
?> 

badword.php

<?php 
$bad_words = array (
    // an array of bad words here... 
); 

class badword { 
    function word_fliter($content) { 
     global $bad_words, $wordreplace; 
     $count = count($bad_words); 
     $has_bad_words = false; 
     for ($n = 0; $n < $count; ++$n, next ($bad_words)) { 
      $filter = "*"; 

      //Search for bad_words in content 
      $search = "$bad_words[$n]"; 
      $content = preg_replace("'$search'i","<i>$filter</i>",$content); 
      if(preg_match("'$search'i", $content) && !$has_bad_words){ 
       $has_bad_words = true; 
      } 
      else { 
       $has_bad_words = false; 
      } 
     } 
     return array('content' => $content, 'has_bad_words' => $has_bad_words); 
    } 
} 
+0

нет каких-либо $ has_bad_words status? –

+0

нет, если 'preg_match' возвращает 1/true, тогда вы знаете, что вызвано «preg_replace». –

+0

Не могли бы вы показать мне, например, на https://eval.in/? –

0
<?php 
$bad_words = array (
    // an array of bad words here... 
    ); 

$bad_word_check = ""; 
$bad_word_detect = ""; 

class badword { 
    function word_fliter($content) { 
     global $bad_words, $wordreplace; 
     $count = count($bad_words); 
     for ($n = 0; $n < $count; ++$n, next ($bad_words)) { 
      $filter = "*"; 

      //Search for bad_words in content 
      $search = "$bad_words[$n]"; 

      $xx = "%".$search."%"; 
      if(preg_match($xx, $content)) 
      { 
       $bad_word_check = "1"; 
       $bad_word_detect = $bad_word_detect."".$search.","; 
      } 

      $content = preg_replace("'$search'i","<i>$filter</i>",$content); 
     } 
     return array('content' => $content, 'bad_word_check' => $bad_word_check, 'bad_word_detect' => $bad_word_detect); 
    } 
} 
$content = "cat bad_word bad_word dog association"; 
$badword = new badword(); 
echo $badword->word_fliter("$content")[content]; 
echo "<BR>"; 
echo $badword->word_fliter("$content")[bad_word_check]; 
echo "<BR>"; 
echo $badword->word_fliter("$content")[bad_word_detect]; 
?> 
+1

это решение, которое вы получили от другого ответа? Если это так, вы должны принять тот, с которого вы его получили. –

+0

это не имеет смысла ... Я иду домой xD – Cashbee

+0

@Cashbee Я не обвиняю вас в этом. –

Смежные вопросы