Frage

Es gibt eine Kommentarfunktion, wo ich die Leute auch in Fremdsprachen zu schreiben in der Lage sein würde. Aber zum Beispiel meines Spam-Filterung Mechanismus würde etwas naiive als das Wort blockieren „été“ einfach, weil es keine Vokale drin (Englisch Vokale, das ist) hat.

Meine Frage ist, wenn regex zur Erkennung Vokale wie:

$pattern = '/[aeiou]/';

Ich kann nicht einfach schreiben

$pattern = '/[aeiouéáíúó...]/';

und der Server würde das gut interpretieren. Wie kann ich dies tun, so dass es gut interpretiert wird?

Für nicht-lateinische Alphabete wie russischen und hebräisch, gibt es ein Verfahren, dass ich erkennen kann, welche Sprache der Inhalt gehört und einen entsprechenden Spam-Filterung Mechanismus durchführen?

Der Zweck der gesamten Spam-Filter ist alles zu blockieren, wie: „gjkdkgahg“ oder „ttt“, es ist eine öffentlich sichtbare Seite.

War es hilfreich?

Lösung

$pattern = '/[aeiouéáíúó]/';

Mit dem u Modifikator Unicode zu erhalten -Aware regex und das sollte funktionieren, Sie arbeiten mit UTF-8-Strings in Ihrer App unter der Annahme, die Sie wirklich sein sollten.

  

Für nicht-lateinische Alphabete wie russische und hebräisch, gibt es ein Verfahren, dass ich die Sprache der Inhalt gehört, und führen Sie einen entsprechenden Spam-Filtermechanismus erkennen kann?

Grund Russisch wird in Unicode-Bereich U + 0400-U + 04FF gefunden; Vokale sind аэыуояеёюи. Hebräisch ist in Bereich U + 0590-U + 05FF und verwenden Vokale nicht in der gleichen Weise. Ich glaube nicht, Vokale Erkennen schrecklich nützlich ist ... Sie vielleicht mehr Glück mit einem einfachen Wörterbuch haben viele Sprachen abdecken, solange Sie auf Sprachen halten, die klaren Wortgrenzen haben. Nicht viel für Chinesisch.

Ich glaube nicht, dass diese Art der Sache ein guter Anti-Spam-Mechanismus überhaupt. Es ist so wahrscheinlich zu falsch-positive wie es Spam zu erkennen ist, die nach allen sehr oft richtigen Worten. Unterschiedliche Spoiler Felder (CSS versteckte Eingänge, die leer gelassen werden müssen, sondern werden von Bots nicht sein) und eine bedien oder zeitlich begrenzte Abgabe Token sind viel wahrscheinlicher, um wirksam zu sein.

Andere Tipps

könnten Sie verwenden den normalizer Strings zu finden, mit akzentuierten Zeichen :

<?
    if (! normalizer_is_normalized($input)) {
        // handle non-normalized input
    }
?>

Bei Bedarf können Sie auch diese Klasse verwenden zu normalisieren Strings für Vokale suchen:

<?
    $norm = normalizer_normalize($input);
    if (! preg_match('/[aeiou]/', $norm)) {
        // handle no-vowels in input
    }
?>

Sie wollen auch über die Standard-Normalisierungsform lesen und stellen Sie sicher, dass es erfüllt Ihre Anforderungen.

Hmm, ich persönlich ein Spam-Filter wie das Ihre nicht allzu effektiv finden. IMO ist es viel besser für Links, starke Worte zu sehen, und sexuelle / warez verwandte Wörter, Spam enthalten sie oft. Sie könnten die commend Recht nur für registrierte Benutzer beschränken, und man konnte sich als Moderator löschen, bevor sie auftauchen, wenn sie von nicht vertrauenswürdiger (= von nicht registrierten Benutzern) Quelle stammen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top