WordPress ve PHP Çekirdeği
is_email()
Fonksiyon Kaynak tipik bir WordPress uygulamasıdır ve hangi tamamen çalışmaz RFC 6531 tanır. Bunun bir nedeni, varsayılan PHP FILTER_VALIDATE_EMAIL
sabitinin filter_var()
, Internet Engineering Task Force (IETF®) yönergelerine göre bir şeyi doğrulamakta çok daha iyi olmaması olabilir .
Standartlar
Buradaki nokta, RFC 6531'in "ASCII aralığının ötesindeki Unicode karakterlere" izin vermesidir . Yani bunlar (yerel kısım için - öncesinde @
):
- Büyük ve küçük İngilizce harfleri (a – z, A – Z) (ASCII: 65–90, 97–122)
- Rakamlar
0
için 9
(ASCII: 48-57)
- Bu özel karakterler:
! # $ % & ' * + - / = ? ^ _ ` { | } ~
- Karakter
.
(nokta, nokta, tam durdurma) (ASCII: 46), ilk veya son karakter olmaması koşuluyla ve art arda görünmemesi koşuluyla (örn John..Doe@example.com
. İzin verilmez).
- Özel karakterlere kısıtlamalarla izin verilir. Onlar:
- Boşluk ve
"(),:;<>@[\]
(ASCII: 32, 34, 40, 41, 44, 58, 59, 60, 62, 64, 91–93)
- Özel karakterler için kısıtlamalar, yalnızca tırnak işaretleri arasında yer almaları gerektiğinde kullanılmaları ve bunlardan 2 tanesinin (ters eğik çizgi ve tırnak işareti "(ASCII: 92, 34)) bir ters eğik çizgi
\
(ör. "\\"
Ve "\""
) .
- Yerel bölümün her iki ucunda da parantezle yorumlara izin verilir; örneğin
john.smith(comment)@example.com
ve (comment)john.smith@example.com
her ikisi de eşdeğerdir "john.smith@example.com"
, ancak john.(comment)smith@example.com
geçersizdir.
U+007F
UTF-8 olarak kodlanan yukarıdaki uluslararası karakterlere RFC 6531 izin verir, ancak posta sistemleri yerel parçalar atarken hangi karakterlerin kullanılacağını kısıtlayabilir.
ve global / domain bölümü için:
Bir e-posta adresinin alan adı kısmı katı kurallara uymalıdır: harfler, rakamlar, kısa çizgiler ve noktalardan oluşan bir ana bilgisayar adı gereksinimlerini karşılamalıdır. Buna ek olarak, etki alanı kısmı, jsmith@[192.168.2.1]
veya gibi jsmith@[IPv6:2001:db8::1]
[]] köşeli parantez ile çevrili bir IP adresi değişmez olabilir.
Kaynak: Wikipedia
Geçerli olan nedir?
Bu, aşağıdaki gibi garip ancak geçerli e-posta adreslerine yol açabilir:
localpart.ending.with.dot.@example.com
(comment)localpart@example.com
"this is v@lid!"@example.com
"much.more unusual"@example.com
postbox@com
admin@mailserver1
"()<>[]:,;\\@\"\\\\!#$%&\'*+-/=?^_`{}| ~.a"@example.org
" "@example.org
Kaynak: php.net / author gt@kani.hu - bu yazının yazarı tarafından düzeltilen örnek
Sınırları
Yerel ve alan adı uzunluğu sınırları da vardır:
E-posta adreslerinin biçimi local-part@domain
, yerel bölümün en fazla 64 karakter uzunluğunda olabileceği ve alan adının maksimum 253 karakterden oluşabileceği yerdir - ancak ileri veya geri yolun maksimum 256 karakterlik uzunluğu , tüm e-posta adresini olması en fazla 254 karakter uzunluğunda . [2] resmi tanımlar RFC 5322 olan (bölümler 3.2.3 3.4.1) ve RFC 5321 - bilgi RFC 3696 [3] ve ilgili doğrularını verilen daha okunabilir bir formu .
Kaynak: Wikipedia
WordPress kısıtlamaları
Ve WordPress aşağıdakileri kontrol eder:
- E-postanın olabileceği minimum uzunluğu test edin:
strlen( $email ) < 3
- İlk konumdan sonra bir @ karakteri test edin:
strpos( $email, '@', 1 ) === false
- Geçersiz karakterleri test edin:
!preg_match( '/^[a-zA-Z0-9!#$%&\'*+\/=?^_`{|}~\.-]+$/', $local )
- Periyod dizileri için test:
preg_match( '/\.{2,}/', $domain )
- Ön ve arka dönemleri ve boşlukları test edin:
trim( $domain, " \t\n\r\0\x0B." ) !== $domain
- Alan adında en az iki alt öğe olacağını varsayalım:
$subs = explode( '.', $domain );
ve sonra
2 > count( $subs )
trim( $sub, " \t\n\r\0\x0B-" ) !== $sub
!preg_match('/^[a-z0-9-]+$/i', $sub )
Kaynak: WP Core v4.0
Filtreler ve özel doğrulama
Yukarıda belirtilen tüm vakalar is_email()
yanlış döndürmeyi tetikleyecektir . Sonuç filtreleme özelliğine sahiptir (geri arama eklenebilir) ve filtrenin üç bağımsız değişkeni olacaktır; burada son argüman nedendir. Misal:
return apply_filters( 'is_email', false, $email, 'sub_hyphen_limits' );
Bu, belirli denetimlerle döndürülen sonuçları geçersiz kılabileceğiniz anlamına gelir.
Bu, örneğin Umlaut alan adlarına, yalnızca TLD alan adlarına vb. İzin vermek için özel kontroller eklemenize olanak tanır.
Sonuç
WordPress çoğu durumda güvenlidir, ancak posta sunucularının RFC uyumlu olması gerektiğinden daha kısıtlayıcıdır. Her posta sunucusunun RF 6531 yönergelerine uygun olmayacağını unutmayın.
Düzenle
Komik yan etki: İçinde iki ilgili işlev vardır ~/wp-includes/formatting
: is_email()
ve sanitize_email()
. Pratik olarak aynı işlevlerdir. Neden birisi sadece diğer sağlar filtreleri geri arama olarak eklemek yerine işlev içeriğini birinden diğerine kopyalamak için iyi bir fikir olacağını karar bir fikrim yok. As v0.71 beri ve v1.5 beri aynıdır bir temizlenmiş dize olsun, ben şahsen daha sonra kullanmak. Not olduğunu o RFC uyumlu olmadığını hatta devletler.is_email()
sanitize_email()
is_email()