【问题标题】:Email Address special characters confusion电子邮件地址特殊字符混淆
【发布时间】:2019-01-22 06:34:47
【问题描述】:

我在玩 filter_var 来验证电子邮件:

$email = "test@test.com"; 

if( filter_var( $email, FILTER_VALIDATE_EMAIL ) ){

    echo "{Valid Email";

}else{

    echo "Invalid Email";

}

返回Valid Email

但是当我在本地尝试像. $ # * ? & ! ^ ~ / ' - _ @ % {} | = +这样的特殊字符时,像:

$email = "te?st@test.com";
$email = "te/st@test.com";
$email = "te'st@test.com";
$email = "te}st@test.com";
$email = "te|st@test.com";
$email = "te=st@test.com";

这也会返回Valid Email

它不接受像<> [] , 这样的字符。

但是如果我使用$:

$email = "te$st@test.com";

这将返回Valid Email,但也会返回NOTICE Undefined variable: st

那么在将电子邮件地址插入数据库之前,我应该使用它来验证电子邮件地址吗?

或者我应该使用自定义正则表达式?

【问题讨论】:

标签: php email-validation


【解决方案1】:

使用双引号字符串时,$ 字符被视为变量名的开头。所以$st看起来像一个变量,PHP 尝试对其进行插值。这很容易通过使用不会在字符串中插入变量的单引号来解决。

$email = 'te$st@test.com';

请参阅PHP documentation for strings 了解更多信息,因为它是 PHP 开发的重要组成部分。

【讨论】:

  • 你是对的,但是如果我检查$_POST['email'],我也会面临这个问题吗?
  • 不,因为 PHP 会像在某些引号中一样查看该变量的字面值,并且不会尝试在其中插入变量
猜你喜欢
  • 2013-04-20
  • 1970-01-01
  • 2010-10-03
  • 1970-01-01
  • 2019-11-06
  • 1970-01-01
  • 1970-01-01
  • 2017-06-15
  • 2015-07-31
相关资源
最近更新 更多