Domanda

C'è un modulo di commento dove mi piacerebbe vuole che la gente a essere in grado di scrivere in lingua straniera troppo.Ma, per esempio, il mio filtro antispam di meccanismo di blocco qualcosa naiive come la parola "été", semplicemente perché non ha le vocali in esso (inglese vocali, che è).

La mia domanda è, quando si utilizza regex per la rilevazione di vocali come:

$pattern = '/[aeiou]/';

Non posso semplicemente scrivere

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

e il server potrebbe interpretare che bene. Come posso fare in modo che SIA interpretato bene?

Per alfabeti non latini come il russo ed ebraico, c'è un metodo che posso rilevare che la lingua il contenuto appartiene e di eseguire un appropriato filtro anti-spam è il meccanismo?

Lo scopo di tutto il filtro anti-spam è quello di bloccare qualcosa come:"gjkdkgahg" o "ttt", è pubblicamente visibile della pagina.

È stato utile?

Soluzione

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

Utilizzare il u modificatore per ottenere Unicode regex e che dovrebbe funzionare, supponendo che si sta lavorando con la codifica UTF-8 corde per tutta la vostra app, che dovrebbe essere realmente.

Per alfabeti non latini come il russo ed ebraico, c'è un metodo che posso rilevare che la lingua il contenuto appartiene e di eseguire un appropriato filtro anti-spam è il meccanismo?

Russo di base è trovato in Unicode U+0400–U+04FF;le vocali sono аэыуояеёюи.L'ebraico è nel range di U+0590–U+05FF e non usa le vocali nello stesso modo.Non credo che la rilevazione vocali è terribilmente utile...si potrebbe avere più fortuna con un semplice dizionario che copre molte lingue, purché si bastone per le lingue che hanno chiari i confini di parola.Non molto uso per il Cinese.

Non credo che questo genere di cose è un buon anti-spam meccanismo a tutti.È probabilmente un falso positivo in quanto è a posto di spam, che è, dopo tutto, molto spesso le parole giuste.Diverse spoiler campi (CSS-hidden input che deve essere lasciato vuoto", ma non da bot) e utilizzare o per un tempo limitato, la presentazione gettoni sono molto più probabilità di essere efficace.

Altri suggerimenti

È possibile utilizzare il normalizzatore per trovare stringhe con caratteri accentati :

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

Se necessario, si potrebbe anche usare questa classe per normalizzare le stringhe per cercare le vocali:

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

Si potrà anche leggere circa la forma normalizzazione predefinito e assicurarsi che soddisfi le vostre esigenze.

Hmm, personalmente non trovo un filtro anti-spam come la tua troppo efficaci. IMO è molto meglio da guardare per i collegamenti, parole forti e parole sessuale / warez correlati, spam spesso li contengono. Si potrebbe limitare l'affido giusta solo per gli utenti registrati, e li si potrebbe eliminare come moderatore prima si fanno vedere, se proviene da non attendibile (= da utente non registrato) fonte.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top