PHP Badword filtre?

5 Cevap php

PHP bir küfür filtresi yazıyorum.

Ben bir dizi ve yöntem cleanse_text () gibi yazılır içinde badwords bir listesi var:

public static function cleanse_text($originalstring){
   if (!self::$is_sorted) self::doSort();
   return str_ireplace(self::$badwords, '****', $originalstring);
}

Bu kesin maçlar için, trivially çalışıyor, ama aynı zamanda 'abcd' kötü bir kelime 'ab * d' gibi örtülü olan kelimeleri sansürlemek istediler. Bu biraz daha zor olduğunu kanıtlamaktadır.

İşte benim sorular şunlardır:

  1. Ile rahatsız değer bir küfür filtresi mı (o kadar belli bir asgari edep gereken profesyoneller için bir sitedir - Ben sanırdım)

  2. O 'f * ck' gibi bariz iş arounds yakalamak için çalışıyor değerinde acele mi - ya da ben o filtrelemek için çalışmamalısınız.

  3. Yukarıdaki cleanse_text () yöntemi, yazma daha iyi bir yolu var mı?

5 Cevap

Ben kesinlikle onunla rahatsız olmaz.

  1. Bu profesyoneller için bir site, bu nedenle uygun bir şekilde hareket edeceğini varsayabiliriz. Bazı kurallar ılımlılık ve icra doğrultusunda herkes koyacağız. Örneğin Yığın taşması bak. Hatta toplum moderasyon araçları olmadan, insanlar uygun davranmak içine basınçlı olabilir.

  2. It would fail. Orada çok fazla yanlış pozitif ("clbuttic") olacak ve tüm olası yemin kelimeleri korumak imkansız olacağını içeren bir liste yapma olacaktır. Bazı harfleri yerine (örn: f*ck) hiç az saldırgan hale getirir. Kelimeyi Çıkarma tamamen yanlış pozitif büyük bir sorun olduğu, anlamı yok.

  3. Eşek ve kuşlar hakkında bir tartışma düşünün. Tüm eşek, göğüsleri, göğüslerine ve musluklar hakkında olurdu.

Profesyoneller için bir web sitesi varsa, o zaman rahatsız etmeyin. Siz ilk etapta çok küfrederek görmezsiniz, ve bunu yaparken büyük olasılıkla komedi etkisi veya benzer olacaktır. Olgunlaşmamış bir malikâne bir sürü yemin ederim insanlar sadece herkesin üzerinde kötü bir izlenim yaparak cezalandırılacaktır. (Ve tamamen aşırıya olanların zaten moderatörler tarafından ele alınması gerektiğini, bu yüzden bu bir sorun olmamalı.)

Ne kötü bir kelime filtresi uygulamaya çalıştığınızda olur siz küfürlere tamamen selim kullanımlarını sansürleme sonuna kadar, ve birçok durumda, aynı zamanda küfürlere ama filtre yakalamak için yeterince benzer değildir sözcükleri sansür olduğunu. (Açıklamalarda belirtildiği @ deceze gibi, Scunthorpe problem denir.) Ayrıca, all-out gitmek sürece, bu aşmak için gerçekten çok kolay olacak. All-in-all, I'd say it's not worth the effort.

Örnek olarak yığın taşması atın. Hiçbir kötü kelime filtresi var ve gayet güzel yapıyor - Ben bu tür şeyler ile herhangi bir sorun duymadım.

Tamam, burada farklı bir fikir:

Ben filtreleme ne içerik bilmiyorum, ama ben sadece bu hala olabilir başka ne için geçerli olacak çünkü bir yorum sistemi varsayıyorum edeceğiz.

Muhtemelen yönetimsel arayüzü çeşit var. Birisi bir açıklama olası bir "kötü bir kelime" içeren her zaman sizin için bir not bırakır eğer arayüz ne dedi. Ya da size sitede göründü tüm belki-küfür günlük e-posta gönderir. Tıklandığında, otomatik olarak istediğiniz ne olursa olsun, ya da silin ya da ne olursa olsun yorum / yazı / bir filtre uygulamak olacağını her girişin yanındaki bağlantıları var olabilir. Sonra, siteyi temizlemek için bir veya iki kez raporunda sadece bakışta tıklayınız olabilir ve onunla yapılabilir.

Bu ölçeği değil düşünebilirsiniz. Muhtemelen olmaz. Sitenizin trafik bir ton almazsa Ama, hatta her gün bir rapor alamayabilirsiniz. Ya da her hafta. Siz hiç çok müdahale etmek zorunda olmayabilir. Hayır listeleri, her türlü sakıncalı kelimenin düşünme ve olası yazımlar tüm hiç yanlış pozitif hayır.

Bu işe yarayabilir.

Zaten bütün 8u11 $ # 1 + bulunuyor. Sadece okunabilir bir kural yayınlamak, insanlar saldırgan katkıları ve ban suçluları bayrak edelim.

Eğer bu işlevi uygulamak isterim pek çok olgu vardır. Hiç% 100 doğru / güvenli / arıza olacak? Elbette değil, ama ne olduğunu bana söyleyebilir yok!

Eğer OP isteği (ki otomatik bayrakları sonrası / kullanıcı girişi) with bir 'rapor bu' genel kullanıcı için işlevselliği birleştiren ise, gerçekten güçlü bir sistemi var. En büyük şirketler ve işletmelerin bu oto bayraklı girişlerinin "admin personel yorum" ve also radar altında kaymış bir şey bildirmek için normal bir kullanıcı için yeteneğini birleştiren, sistemi, "bölüşmek" kullanımı .

function spam_found($full_string){
    $spam = array('100%', '100 %', '110%', '110 %', 'free');
    $i = 0;
    foreach ($spam as $spamword) {
        if (strrpos($full_string, $spamword)) {
            $i++;
        }
    }
    if($i > 0){
        return true;
    }else{
        return false;
    }
}

Bu benim şirkette kullanmak sadece çok temel işlevi "şablon" dir (MVC ortamında kullanılan, bu aslında bir denetleyicisi denilen bir yardımcı işlev, biz giriş türüne bağlı olarak birçok tür işlevleri vardır). Spam kelimelerin 3 bulunursa bu kolayca durumların bir dizi adapte olabilir, örneğin, sadece true döndürecektir.

Eğer bir iş ilanı Örneğin, Avustralya'da, bunun sadece belirli bir cinsiyet için olduğunu belirtmek yasaktır. Yani bir striptiz kulübünde çalışmak bir kız arıyorsanız, size not "sadece kızlar arıyorum" demek için izin verilir, doğru. Bir web sitesi böyle bir pozisyon web sitesi (reklam yayınlanmıştır reklamveren / kişi değildir), olası cezai veya sivil ücretleri / davalar için sorumlu olan, (Facebook, yani) reklamı olduğu tespit edilirse.

Facebook kelimeleri "erkek, kadın, çocuklar, kızlar, vb) söz Avustralya'da reklamı herhangi bir iş için bir" spam kontrolü "yapmak için yukarıda belirtilen durumda, mükemmel mantıklı olur.