【问题标题】:PHP cuts off email address string copied from OutlookPHP 切断从 Outlook 复制的电子邮件地址字符串
【发布时间】:2016-09-29 15:14:48
【问题描述】:

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

所以我通过正则表达式添加了一个客户端验证,它只允许您在电子邮件的格式为 [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 "

字符串停在&lt;,但它的长度仍然是42。这里到底发生了什么?

编辑:

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

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

【问题讨论】:

    标签: php string email outlook


    【解决方案1】:

    PHP 不会切断任何东西。但是 &lt;&gt; 被解释为 HTML 标记,因此被浏览器忽略。 只需查看页面源代码,您就会发现缺少的字符。

    要查看 HTML 中的整个文本,您必须对其进行转义:

    echo htmlentities($email);
    

    【讨论】:

    • 谢谢...解释了很多。我们 CMS 的后端也是基于 HTML 的。所以我以为它实际上只保存了名称。
    猜你喜欢
    • 2012-02-08
    • 2017-10-09
    • 1970-01-01
    • 2023-04-07
    • 2017-10-10
    • 2011-06-29
    • 2021-04-13
    • 1970-01-01
    • 2011-12-17
    相关资源
    最近更新 更多