Bazı kelimeler Filtre

5 Cevap php

Benim başlık formda bazı ayrılmış kelime filtrelemek istiyorum.

$adtitle = sanitize($_POST['title']);
$ignore = array('sale','buy','rent');
if(in_array($adtitle, $ignore)) {
$_SESSION['ignore_error'] = '<strong>'.$adtitle.'</strong> cannot be use as your title';
header('Location:/submit/');
exit;
  • How to make something like this. If user type Car for sale the sale will detected as reserved keyword.
  • Şimdi benim geçerli kod sadece tek bir anahtar kelime sadece algılar.

5 Cevap

Muhtemelen bir düzenli ifade için arıyoruz:

foreach($ignore as $keyword) {
  if(preg_match("/\b$keyword\b/i", $adtitle) {
    // Uhoh, the user used a bad word!!
  }
}

Bu 'kira' içerdiğinden, bu da bu tür 'torrent' ayrılmış bir kelime olarak geliyor değil gibi bazı yanlış pozitif önlemek olacaktır.

Ayrıca böyle bir şey deneyebilirsiniz:

$ignore = array('sale','rent','buy');
$invalid = array_intersect($ignore, preg_split('{\W+}', $adtitle));

Sonra $ geçersiz başlığında kullanılan tüm ayrılmış kelimelerin bir listesini içerecektir. Eğer why başlık kullanılamaz açıklamak istedim, bu yararlı olabilir.

EDIT:

$invalid = array_intersect($ignore, preg_split('{\W+}', strtolower($adtitle));

Eğer harf büyüklüğüne duyarsız eşleşme istiyorsanız.

$ Adtitle = sterilize ($ _POST ['title']);

$ignoreArr = array('sale','buy','rent');

foreach($ignoreArr as $ignore){
if(strpos($ignore, $adtitle)!==false){

 $_SESSION['ignore_error'] = '<strong>'.$adtitle.'</strong> cannot

Kitabınız 'olarak kullanmak olabilir;

 break;
}  

} header('Location:/submit/');

exit;

Bu çalışması gerekir. Olsa test edilmedi.

function isValidTitle($str) {
   // these may want to be placed in a config file
   $badWords = array('sale','buy','rent'); 

    foreach($badWords as $word) {
        if (strstr($str, $word)) return false; // found a word!
    }
    // no bad word found
    return true;

}

(Diğer bir deyişle içinde olduğu gibi, kısmi değil karşılaşmalar yanı) kelimeleri only maç istiyorsanız, bunun altında bir modifiye deneyin

function isValidTitle($str) {

       $badWords = array('sale','buy','rent'); 

        foreach($badWords as $word) {
            if (preg_match('/\b' . trim($word) . '\b/i', $str)) return false; 
        }

        return true;

    }

Nasıl da bu kadar basit bir şey:

if ( preg_match("/\b" . implode("|", $ignore) . "\b/i", $adtitle) ) {
    // No good
}