【问题标题】:PHP detecting multiple consecutive special characters in a stringPHP检测字符串中的多个连续特殊字符
【发布时间】:2018-07-31 08:47:33
【问题描述】:

我每天都会通过联系表格收到大量垃圾邮件。这些垃圾邮件的内容与此示例非常相似:

Ïîñëåäíèè íîâîñòè àðìåíèè ÷èòàéòå íà ñàéòå somedomainname.com

对于这种特定类型的垃圾邮件,我想添加对 3 个连续特殊字符的 PHP 检测,因为它永远不会出现在合法电子邮件中(至少在过去 10 年中没有出现)。有什么聪明的方法可以做到这一点?

edit:我不确定我应该如何对这些字符进行分类。如示例所示,它们都有某种口音。

【问题讨论】:

  • 这个大量的垃圾邮件是多少?
  • 在这种情况下没有“特殊字符”之类的东西。您似乎正在尝试将 utf-8 呈现为 Latin-1。
  • 使用验证码怎么样?
  • @simon 我问这个问题的原因 xD
  • 你怎么知道它永远不会出现在合法的电子邮件中?如果发件人碰巧用韩语给你写信,或者碰巧喜欢表情符号怎么办?您最好使用一些替代方法,例如 IP 阻止或类似方法。

标签: php special-characters spam-prevention


【解决方案1】:

基于另一个问题: how to check for special characters php

您可以在邮件内容上使用正则表达式:

if (preg_match('/([Ïîñëåäíèè]){3}/', $contentOfMail))
{
    // $contentOfMail contains at least one set of 3 specials characters back to back
}

我让你在正则表达式中填写你需要匹配的所有字符

【讨论】:

    【解决方案2】:

    要检查是否存在一个或多个字母,您可以使用本机 function of PHP strpos,如下例所示。否则,您也可以使用正则表达式,但对于基本验证和性能问题,建议使用原生 PHP 函数。

     $mystring = $_POST['message'];
        $findme   = 'Ïîñëåäíèè';
    
            $pos = strpos($mystring, $findme);
    
            // Note our use of ===.  Simply == would not work as expected
           // because the position of 'a' was the 0th (first) character.
    if ($pos === false) {
        echo "The string '$findme' was not found in the string '$mystring'";
    } else {
        echo "The string '$findme' was found in the string '$mystring'";
        echo " and exists at position $pos";
    }
    

    【讨论】:

    • 这将找到特定的字符串。我正在寻找任何随机的“特殊”字符序列。
    猜你喜欢
    • 2018-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-02
    • 1970-01-01
    • 2011-05-29
    • 1970-01-01
    相关资源
    最近更新 更多