Question

Il y a une forme de commentaires où je veux que les gens soient en mesure d'écrire aussi dans des langues étrangères. Mais, par exemple, mon mécanisme de filtrage de spam bloquerait quelque chose naiive que le mot « été » tout simplement parce qu'il n'a pas de voyelles en elle (voyelles anglais qui est).

Ma question est, lorsque vous utilisez regex pour détecter les voyelles comme:

$pattern = '/[aeiou]/';

Je ne peux pas simplement écrire

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

et le serveur interpréterait bien. Comment puis-je faire de sorte qu'il est bien interprété?

Pour alphabets non latins comme le russe et l'hébreu, est-il une méthode que je peux détecter la langue du contenu appartient et effectuer un mécanisme de filtrage de spam approprié?

Le but de l'ensemble de filtrage du spam est de bloquer quoi que ce soit comme: « gjkdkgahg » ou « TTT », il est une page visible publiquement.

Était-ce utile?

La solution

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

Utilisez le u modificateur pour obtenir Unicode -Aware regex et qui devrait fonctionner, en supposant que vous travaillez avec UTF-8 cordes tout au long de votre application, que vous devriez vraiment.

  

Pour alphabets non latins comme le russe et l'hébreu, est-il une méthode que je peux détecter la langue du contenu appartient et effectuer un mécanisme de filtrage de spam approprié?

Basic russe se trouve dans la gamme Unicode U + 0400-U + 04FF; voyelles sont аэыуояеёюи. L'hébreu est dans la gamme U + 0590-U + 05FF et ne pas utiliser les voyelles de la même manière. Je ne pense pas que la détection de voyelles est terriblement utile ... vous pourriez avoir plus de chance avec un simple dictionnaire couvrant de nombreuses langues, aussi longtemps que vous vous en tenez aux langues qui ont des limites de mots clairs. Pas grand-chose pour l'utilisation chinoise.

Je ne pense pas que ce genre de chose est un bon mécanisme anti-spam du tout. Il est aussi probable que de faux positifs car il est de repérer le spam, ce qui est après tous les mots très souvent appropriés. Spoiler champs différents (entrées cachées CSS qui doivent être laissés en blanc, mais ne sera pas par des bots) et une utilisation ou des jetons de soumission à durée limitée sont beaucoup plus susceptibles d'être efficaces.

Autres conseils

Vous pouvez utiliser le normalisateur pour trouver des chaînes avec des caractères accentués :

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

Si nécessaire, vous pouvez également utiliser cette classe pour normaliser les chaînes à rechercher des voyelles:

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

Vous aurez également lire sur la forme de normalisation par défaut et assurez-vous qu'il répond à vos besoins.

Hmm, personnellement, je ne trouve pas un filtre anti-spam comme le vôtre aussi efficace. L'OMI, il est préférable de regarder pour des liens, des mots forts, et des mots à caractère sexuel / warez, le spam contiennent souvent. Vous pouvez restreindre le droit Commend uniquement pour les utilisateurs enregistrés, et vous pouvez les supprimer en tant que modérateur avant qu'ils apparaissent, si elles proviennent de source non fiable (= d'un utilisateur non enregistré).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top