Nasıl PHP bir e-posta adresi normalize mı?

7 Cevap php

Bir e-posta adresi normalize PHP bir işlevi var mı?

Örneğin, durum önemli değilse, o zaman FOO@example.com -> foo@example.com.

Ben e-posta adresleri "aynı" düşünülmelidir için kurallarını bilmiyorum, bu yüzden bu kendimi uygulamak istemiyorum.

7 Cevap

Wikipedia çeşitli RFC bir email address nasıl oluşturulması gerektiği hakkında söylediklerini bir toparlama vardır.

Başkalarının söylediklerini rağmen, e-posta can be harf duyarlı

Yerel-kısım harf duyarlıdır, bu yüzden "jsmith@example.com" ve "JSmith@example.com" farklı kişilere teslim edilebilir. Bu uygulama, RFC 5321 tarafından önerilmez. However, only the authoritative mail servers for a domain may make that decision. Tek istisna duyarsız olduğunu "postmaster" yerel-kısım değer olduğunu ve sunucunun yöneticisine iletilmelidir.

Yerel kısmı, @ işaretinin solundaki adres kısmına bahsetmektedir.

Yani, kadar belirli endişe (vaka normalleştirme) gibi, size en uygun gördüğünüz Ancak (strtolower, @ ile sunucu bileşeni bölünmüş, recombine) (@ sağında) sunucu kısmı küçük harfe olabilir.

Sunucu kısmı küçük harf yapmak için strtolower () kullanın. (Nedeniyle önceki yanıta Güncellendi)

$parts = explode("@", $email);
$host = strtolower($parts[1]);
$email = $parts[0]."@".$host;

Eğer biçim lutfen standardize etmek istiyorsanız Ayrıca, muhtemelen diğer bazı formatlar ile birlikte, e-posta adreslerini doğrulamak / sanatize hangi, filter_var() içine bakmak istiyorum.

Birincisi, FILTER_SANATIZE_EMAIL bunu hiçbir yasadışı karakter vardır emin olacaktır.

$email_sanatized = filter_var('bob@example.com', FILTER_SANATIZE_EMAIL);

Sonra, FILTER_VALIDATE_EMAIL emin geçerli bir e-posta formatında yapacak

$email = filter_var($email_sanatized, FILTER_VALIDATE_EMAIL);

Eğer isterseniz, doğru e-postaların çoğu kapak olabilir ki, () strtolower kullanabilirsiniz. Eğer doğru yapmak istiyorsanız Ama burada bazı ek bilgiler olduğunu:

Bir yerel kısmı (@ önce bir şey) ve etki alanı (@ sonra herhangi bir şey): Bir e-posta adresi iki bölümden oluşmaktadır. Yerel-kısım etki kısmında verilen etki posta sunucusu tarafından yorumlanır olması gerekiyordu, bu yüzden aslında (örneğin vaka hususlar!) Bu konuda any varsayımlar yapamazsınız.

Birçok posta sunucuları aşağıdaki gibi adding arbitrary comments to your user name with a plus sign seçeneği sunar:

soulmerge+this_mail_is_delivered_to_the_user_soulmerge@example.com

Bir posta sunucusu için soulmerge@example.com, soulmerge+friends@example.com ve SOULMERGE@example.com başka iki ya da üç ayrı posta kutularına işaret olabilir oysa, aynı posta kutusu olabilir, ama gerçektir olabilir : bilemezsiniz. Eğer bütün adresi üzerinde yapacağınız herhangi bir çeviri geçersiz bir adrese yol açabilir.

Bu diğer cevaplar sadece bir tamamlayıcıdır.

gmail durumunda, bir sol taraftaki noktalar çıkarıyoruz.

Gmail herhangi bir kullanıcı adı için tek kayıt sağlar. Bir kullanıcı adı için kaydolmak sonra, kimse ne olursa olsun ekstra dönemleri veya büyük harfler içeren olsun, aynı kullanıcı için kayıt olabilirsiniz; bu kullanıcı adları size aittir. Eğer yourusername@gmail.com oluşturduğunuz takdirde, hiç kimse your.username @ gmail.com kayıt, ya Your.user.name @ gmail.com olabilir. Gmail, kullanıcı adları içindeki noktaları karakter olarak tanımadığı için, eklemek veya gerçek hedef adresini değiştirmeden bir Gmail adresinden noktalar kaldırabilirsiniz; hepsi gelen kutunuza gidin ve sadece senin olacak.

bu yüzden her zaman aynı gmail e-posta emin olabilir.

Tüm boşlukları dışarı Döşeme, sonra da strtolower ile karşılaştırın. Bu mükemmel ince olmalıdır.

EDIT: Sadece etki devletler başka bir yanıt dayanarak ben sadece etki alanı değil kullanıcı küçük harfe işlevini güncelledik duyarsız olduğunu.

function NormalizeEmail( $email )
{
    list( $user, $domain ) = explode( '@', trim( $email ) );
    return $user . '@' . strtolower( $domain );
}