PHP - 检测非英文字母和滤波输入
-
21-09-2019 - |
题
有一个评论表单,我希望人们能够用外语写了。 但是,例如,我的垃圾邮件过滤机制将阻止一些naiive为单词“ETE”仅仅是因为它在它没有元音(英语元音即)。
我的问题是,使用正则表达式,用于检测等元音时:
$pattern = '/[aeiou]/';
我不能简单地写
$pattern = '/[aeiouéáíúó...]/';
和所述服务器将解释那么好。 我怎样才能做到这一点,以便它被解释呢?
有关非拉丁字母等俄语和希伯来语的是有可以检测该内容所属的语言,并执行适当的垃圾邮件过滤机制的方法吗
整个垃圾邮件过滤的目的是阻止像什么:“gjkdkgahg”或“TTT”,这是一个公开可见的页面。
解决方案
$pattern = '/[aeiouéáíúó]/';
使用u
修改得到的Unicode正则表达式知晓的,并且应该工作,假设你使用UTF-8字符串整个应用程序,你应该是真正的工作。
有关非拉丁字母等俄语和希伯来语,是有可以检测该内容所属的语言,并执行适当的垃圾邮件过滤机制的方法?
基本俄罗斯以Unicode范围U + 0400-U + 04FF实测值;元音аэыуояеёюи。希伯来文是在范围内U + 0590-U + 05FF,并以同样的方式不使用元音。我不认为检测元音是非常有用的...你可能有更多的运气与简单的字典涵盖多国语言,只要你坚持有明确的单词边界的语言。没有太大的用处了中国。
我不认为这样的事情是所有的好反垃圾邮件机制。这是因为有可能出现假阳性,因为它是被发现的垃圾邮件,这是所有经常适当的话后。变化的扰流器字段(即必须保留为空,但不会是由机器人CSS-隐藏输入)和单次使用的或有限时间提交令牌更可能多是有效的。
其他提示
您可以使用正规化找到与重音字符的字符串:
<?
if (! normalizer_is_normalized($input)) {
// handle non-normalized input
}
?>
如果需要的话,你也可以使用这个类正常化字符串搜索元音:
<?
$norm = normalizer_normalize($input);
if (! preg_match('/[aeiou]/', $norm)) {
// handle no-vowels in input
}
?>
您还需要了解默认的范式,并确保它满足您的要求。
嗯,我个人不觉得像您这样的垃圾邮件过滤器也有效。国际海事组织是更好看的链接,言辞激烈,性/ warez的相关词,垃圾邮件经常包含它们。你可以限制称道权只对注册用户,你可以删除它们主持人他们出现之前,如果他们来自不受信任(=来自未注册的用户)的源。