Anti-spam için bu verimli kodlama mi?

7 Cevap
if(strpos($string, "A Bad Word") != false){
    echo 'This word is not allowed';
}
if(strpos($string, "A Bad Word") != false){
    echo 'This word is not allowed';
}

Tamam, ben uygunsuz sözler olup olmadığını görmek için göndermek verileri kontrol etmek çalışıyorum. 5 yerine örneklerini yapma, daha etkili bir yolu var mı?

7 Cevap

Ben genel olarak bunun için daha akıllı bir yol vardır eminim.

Sadece daha kısa olmak istiyorsanız, o zaman yerine tekrarlayan, hemen hemen aynı, conditionals (IFS) ekleyerek, bazı kötü sözler üzerine muhtemelen en döngü var:

<?PHP
$banned = array('bad','words','like','these');

$looksLikeSpam = false;
foreach($banned as $naughty){
    if (strpos($string,$naugty) !== false){
        $looksLikeSpam=true;
    }
}

if ($looksLikeSpam){
   echo "You're GROSS!  Just... ew!";
   die();
}

Edit: Ayrıca, soru-kodu, sen strpos = false sınamak unutmayın. Eğer gerçekten istediğiniz! ==, Ilk kelime, diyelim ki, penis ise strpos () 0 dönecektir beri. 0 false atılacaktır. Burada nereye gidiyorum bak?

Ayrıca, muhtemelen duyarlı olması için, stripos () kullanmak istiyorsanız (sadece bakım sürece eğer insanlar saldırgan kelime SHOUT eğer :-))

Evet, badwords bir dizi yapmak ve bunun dışında bir regex inşa olabilir. Bu da kolay bir durum-duyarsızlığı taşıma yapacak.

$badwords = array('staircase', 'tuna', 'pillow');
$badwords_regex = '/' . implode('|', $badwords) . '/i';

$contains_badwords = preg_match($badwords_regex, $text);

Hayır, bu bir saçmalık. Ilgili bilgisayar bilim bir bütün dalı vardır string searching algorithms. Heck, TAOCP Volume 3 o kadar Knuth da ayrılmış bir.

Boyer-Moore artık samanlıkta iğne ararken birden içeren birçok uygulamada kullanılan iyi bir algoritma vardır.

Sen kelime sınırları ile dikkatli olmak, ya da başka insanlar "raketle" gibi kelimeleri girmek mümkün değil varlık hakkında şikayet edecek gerekir.

Ben (veya istemci) otomatik "yaramaz kelime" filtreleme ılımlı için ihtiyaç kaldırmak olmadığını fark umuyoruz. Sözde yaramaz sözcüklerden herhangi birini kullanmadan saldırgan olmak için birçok yolu vardır. Hatta karar nedir ya da saldırgan değildir kültürel bağlamda bağlıdır.

Onların varlığını teyit için tek bir düzenli ifade olarak bunları birleştirmek ve sonra () preg_grep kullanabilirsiniz

Değerler bir dizi kullanmak ve gönderilen kelime her zaman kontrol, dizi üzerinden yineleme. Bir maç döngü dışında mola bulundu ve gerçek dönüş ise.

Eğer bir kelime kontrol ediyoruz eğer, PHP in_array'in işlevini yerine bir döngü kullanabilirsiniz. Eğer olsa bir cümleyi kontrol ediyoruz eğer bir regex daha iyi olurdu.

http://us2.php.net/manual/en/function.in-array.php

$bad_word_array=array('weenis','dolt','wanker');

$passed=in_array($suspected_word,$bad_word_array);