PHP切断了从Outlook

时间:2016-09-29 15:14:49

标签: php string email outlook

我有一个用于通过PHP发送电子邮件的表单。 现在我有一个用户说电子邮件没有通过。我检查过,似乎只有一个名字保存在电子邮件地址的字段中,而不是电子邮件地址。

所以我通过regex添加了客户端验证,只允许您发送电子邮件的格式为[text] @ [text]。[text] - 验证电子邮件地址的常用做法。

使用的正则表达式:

 var regex = /\S+@\S+\.\S+/;
猜猜是什么?问题仍然存在:用户可以发送电子邮件,地址通过验证,但只保存名称!

但是怎么样?

用户已从Outlook复制了电子邮件地址,其格式如下:

Mustermann, Max <Max.Mustermann@gmail.com>

正则表达式验证说:这是一个有效的电子邮件地址。

起初我以为我必须改变我的正则表达式,不允许这样做。但是我的一位同事说这是电子邮件地址的有效格式。

所以我开始研究PHP实际上对该字符串做了什么。在这里变得奇怪:

$email = "Mustermann, Max <Max.Mustermann@gmail.com>";
var_dump($email);
// prints out:
// string(42) "Mustermann, Max "

字符串在<处停止,但其长度仍为42.这里到底发生了什么?

修改

故事结束:我正在使用更严格的正则表达式来验证现在的电子邮件地址,即HTML5 input type="email" from W3C使用的相同内容:

/^[a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/

1 个答案:

答案 0 :(得分:2)

PHP没有削减任何东西。但<>被解释为HTML标记,因此您的浏览器会将其省略。 只需查看页面源代码,您就会找到丢失的字符。

要在HTML中查看整个文本,您必须逃避它:

echo htmlentities($email);