为什么FILTER_SANITIZE_EMAIL没有从无效的电子邮件地址中删除无效字符?

时间:2016-12-28 13:20:37

标签: php email filter email-validation

我正在从w3schools PHP教程学习PHP。

在关于 PHP过滤器的章节中,我遇到了以下程序:

<!DOCTYPE html>
    <html>
      <body>

      <?php
        $email = "john.doe@example.com";

        // Remove all illegal characters from email
        $email = filter_var($email, FILTER_SANITIZE_EMAIL);

        // Validate e-mail
        if (!filter_var($email, FILTER_VALIDATE_EMAIL) === false) {
          echo("$email is a valid email address");
        } else {
          echo("$email is not a valid email address");
        }
      ?>

  </body>
</html>

w3schools说filter_var()函数用于首先从$ email变量中删除所有非法字符,然后检查它是否是有效的电子邮件地址。

然后我尝试将变量$email的值设置为“john.doe@exampleW#%%%%%。com”,并尝试按以下方式打印该值:

<!DOCTYPE html>
<html>
   <body>

   <?php
     $email = "john.doe@exampleW#%%%%%.com";

     // Remove all illegal characters from email
     $email = filter_var($email, FILTER_SANITIZE_EMAIL);
     echo "Echoed Email : ".$email; die;
   ?>

   </body>
 </html>

我得到的上述程序的输出是字符串“john.doe@exampleW#%%%%%。com”,因为我输入了。

我的问题是为什么根据w3schools没有删除给定无效电子邮件中的无效字符?

2 个答案:

答案 0 :(得分:0)

因为,在您的示例中,电子邮件有效,

&#34;的 FILTER_SANITIZE_EMAIL &#34;将允许&#34; !#$%&amp;&#39; * + - =?^ _` {|}〜@。[] &#34;

检查exceptions

答案 1 :(得分:0)

FILTER_SANITIZE_EMAIL不会删除%字符。来自manual

  

删除除字母,数字以外的所有字符!#$%&amp;&#39; * + - =?^ _` {|}〜@。[]。

在电子邮件地址中有很多字符实际上是合法的。