2016-09-29 9 views
1

私はPHP経由でメールを送信するためのフォームを持っています。 メールが届かないと言ったユーザーがいました。私は、電子メールアドレスではなく、電子メールアドレスのフィールドに名前が保存されているように見えました。PHPはOutlookからコピーしたメールアドレス文字列を切り捨てます

電子メールが[text] @ [text] - [text] - 電子メールアドレスを検証する一般的なプラクティスを持つ場合にのみ、送信することを許可するregex経由でクライアント側の検証を追加しました。

使用正規表現:

var regex = /\[email protected]\S+\.\S+/; 

は何を思いますか?問題はまだ発生します:ユーザーは電子メールを送信できますが、アドレスは検証をパスしますが、名前を保存するだけです!

どのようにですか?

Mustermann, Max <[email protected]> 

正規表現の検証は言う:それは有効なメールアドレスです

ユーザーは、次の形式で提供されますOutlookからメールアドレスをコピーしていました。

私は正規表現を変更しなければならないと考えましたが、これを許さないようにしました。しかし、私の同僚の一人は、これは電子メールのアドレスのための有効なフォーマットだと言います。

そこで私はPHPが実際にその文字列で何をしたのか調べ始めました。そして、ここでそれは奇妙次のようになります。

$email = "Mustermann, Max <[email protected]>"; 
var_dump($email); 
// prints out: 
// string(42) "Mustermann, Max " 

文字列が<で停止し、その長さは、まさにここに何が起こるまだ42ですか?

編集:物語の

終了:

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

答えて

2

PHPはありません:私はHTML5 input type="email" from W3Cで使用される、すなわち同じ、今メールアドレスを検証するために厳格な正規表現を使用しています何も切らないでください。 <>はHTMLタグと解釈されるため、ブラウザでは省略されます。 ページのソースコードを見るだけで、欠落している文字を見つけることができます。

HTMLでテキスト全体を見るために、あなたはそれをエスケープする必要があります。

echo htmlentities($email); 
+0

感謝を...多くのことを説明しています。私たちのCMSのバックエンドもHTMLベースです。だから私はそれが実際に名前を保存しただけだと思った。 – Danmoreng

関連する問題