Pergunta

Há uma forma de comentário em que eu gostaria que as pessoas também pudessem escrever em idiomas estrangeiros. Mas, por exemplo, meu mecanismo de filtragem de spam bloquearia algo naiivo como a palavra "Été" simplesmente porque não tem vogais (vogais em inglês é).

Minha pergunta é que, ao usar Regex para detectar vogais como:

$pattern = '/[aeiou]/';

Eu não posso simplesmente escrever

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

e o servidor interpretaria isso bem. Como posso fazer isso para que seja bem interpretado?

Para alfabetos não de latina como russo e hebraico, Existe um método que eu possa detectar a qual idioma o conteúdo pertence e realizar um mecanismo de filtragem de spam apropriado?

O objetivo de toda a filtragem de spam é bloquear qualquer coisa como: "gjkdkgahg" ou "ttt", é uma página publicamente visível.

Foi útil?

Solução

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

Use o u modificador Para obter regex com reconhecimento unicode e isso deve funcionar, supondo que você esteja trabalhando com strings UTF-8 em todo o seu aplicativo, o que você deve ser realmente.

Para alfabetos não de latina como russo e hebraico, existe um método que eu posso detectar a qual idioma o conteúdo pertence e realizar um mecanismo de filtragem de spam apropriado?

O russo básico é encontrado no alcance do Unicode U+0400 - U+04FF; As vogais são uma vez. O hebraico está no alcance U+0590 - U+05FF e não usa vogais da mesma maneira. Eu não acho que detectar vogais é terrivelmente útil ... você pode ter mais sorte com um simples dicionário cobrindo muitos idiomas, desde que você siga idiomas que tenham limites claros de palavras. Não há muito uso para chinês.

Eu não acho que esse tipo de coisa seja um bom mecanismo anti-spam. É tão provável que seja falso-positivo, que seja spam, que, afinal, é muitas vezes as palavras apropriadas. Campos de spoiler variados (entradas cssas de CSS que devem ser deixadas em branco, mas não serão por bots) e os tokens de submissão de tempo único ou de tempo limitado têm muito mais probabilidade de serem eficazes.

Outras dicas

Você poderia usar o normalizador Para encontrar cordas com caracteres acentuados:

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

Se necessário, você também pode usar esta classe para normalizar strings para procurar vogais:

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

Você também deseja ler sobre o formulário de normalização padrão e garantir que ele atenda aos seus requisitos.

Hmm, pessoalmente, não encontro um filtro de spam como o seu muito eficaz. IMO, é muito melhor observar links, palavras fortes e palavras relacionadas ao Sexual/Warez, o spam geralmente as contém. Você pode restringir o elogiar corretamente apenas para usuários registrados e os excluímos como moderador antes que eles apareçam, se eles vieram da fonte não confiável (= da Usuário Não Recordada).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top