Menu

PHP filter_var(): E-posta, Int, URL ve Daha Fazla Doğrulama

filter_var($value, FILTER_VALIDATE_EMAIL) değer geçerliyse değeri, değilse false döndürür; FILTER_VALIDATE_INT, FILTER_VALIDATE_URL, FILTER_VALIDATE_BOOL ve FILTER_VALIDATE_IP aynı şekilde çalışır. Seçenekleri (min_range, default), bayrakları, temizleme filtrelerini ve false ile 0 tuzağını öğrenin.

Bu sayfada çalıştırılabilir editörler var - düzenle, çalıştır ve sonucu anında gör.

filter_var($value, FILTER_VALIDATE_EMAIL) değer geçerli bir e-posta adresi olduğunda değeri, olmadığında false döndürür. Diğer biçimleri kontrol etmek için filtreyi değiştirin: FILTER_VALIDATE_INT, FILTER_VALIDATE_FLOAT, FILTER_VALIDATE_URL, FILTER_VALIDATE_BOOL, FILTER_VALIDATE_IP. Sonucu her zaman === false ile karşılaştırın.

İki sonuç insanları şaşırtır. ada@example alan adında nokta olmadığı için, ' ada@example.com' ise baştaki boşluk nedeniyle reddedilir; bu yüzden girdiyi doğrulamadan önce trim() ile kırpın.

Bir formdan gelen e-postayı doğrulama

Aynı kontrol bir formun arkasında. Çalıştırın, bir adres yazın ve Check düğmesine basın; blok girdiniz $_POST içinde olacak şekilde yeniden çalışır.

FILTER_VALIDATE_EMAIL yalnızca biçimi kontrol eder. nobody@example.com geçer, alan adında yazım hatası olan bir adres de geçerdi. ASCII olmayan karakterler reddedilir: adä@example.com yalnızca @ öncesinde onlara izin veren FILTER_FLAG_EMAIL_UNICODE ile geçer ve exämple.com gibi bir alan adı, onu önce xn-- biçimine çevirmediğiniz sürece bayrakla bile başarısız olur. Bir adresin çalıştığını bilmenin tek yolu ona bir onay bağlantısı göndermektir.

min_range ve max_range ile bir tam sayıyı doğrulama

FILTER_VALIDATE_INT geçerli bir dizgeyi bir int değerine çevirir ve diğer her şeyi reddeder. Seçenekler dizisi bir aralık ve bir varsayılan ekler:

Etraftaki boşluklar ve baştaki bir + kabul edilir, baştaki bir sıfır ('042') kabul edilmez ve '42' için sonuç dizge değil 42 tam sayısıdır. Aralık dışı false verir; bir default seçeneğiyle false yerine varsayılanı alırsınız, bu da ?page= gibi şeyler için kullanışlıdır (bkz. GETve_GET ve _POST). 0x1A veya 0755 kabul etmek için FILTER_FLAG_ALLOW_HEX veya FILTER_FLAG_ALLOW_OCTAL ekleyin.

0 ve false tuzağı

Geçerli bir '0' 0 tam sayısını döndürür ve 0 falsy'dir. Düz bir if onu başarısızlık olarak ele alır:

Aynısı FILTER_VALIDATE_FLOAT ('0.0') ve false değerinin geçerli bir yanıt olduğu FILTER_VALIDATE_BOOL için de geçerlidir. FILTER_NULL_ON_FAILURE bunun içindir.

Boolean değerler, ondalıklı sayılar, URL'ler ve IP adresleri

FILTER_VALIDATE_BOOL PHP 8'deki addır; FILTER_VALIDATE_BOOLEAN aynı filtredir. FILTER_NULL_ON_FAILURE olmadan 'maybe' 'off' değerinden ayırt edilemeyen false döndürürdü.

Geçerli bir URL güvenli bir bağlantı değildir

FILTER_VALIDATE_URL dizgenin herhangi bir şemayla bir URL biçiminde olduğunu kontrol eder. Buna bir href içinde asla istemediğiniz şemalar da dahildir:

javascript://comment%0Aalert(1) FILTER_VALIDATE_URL kontrolünden geçer ve bağlantıya tıklandığında bir tarayıcı onu JavaScript olarak çalıştırır, çünkü %0A //comment kısmını bitirir. Bir kullanıcının URL'sini bir sayfaya yazdırmadan önce şemayı parse_url() ile kontrol edin. FILTER_FLAG_PATH_REQUIRED ve FILTER_FLAG_QUERY_REQUIRED ile parçaları zorunlu da tutabilirsiniz.

Temizleme filtreleri

Temizleme (sanitize) filtreleri evet veya hayır demek yerine karakterleri siler. Girdiyi normalleştirmek için kullanışlıdırlar, onu yazdırmak için güvenli hale getirmek için değil:

İlk satıra bakın: Order #12-345 (x2) girdide hiç olmayan bir sayı olan 12-3452 olur ve üçüncü satır kimsenin yazmadığı bir adrestir. Temizlerseniz sonucu ardından doğrulayın. HTML'e yazdırdığınız her şey için çıktı anında htmlspecialchars() doğru araçtır (FILTER_SANITIZE_FULL_SPECIAL_CHARS aynı kaçışlamayı yapar). FILTER_SANITIZE_STRING PHP 8.1'den beri kullanımdan kaldırıldı; bunun yerine ne kullanılacağı için htmlspecialchars sayfasına bakın.

filter_var_array ile bütün bir formu doğrulama

filter_var_array() anahtar başına bir filtre uygular ve istediğiniz her anahtarla bir dizi döndürür: filtrelenmiş değer, doğrulama başarısız olduğunda false ya da anahtar eksik olduğunda null.

role gitti: listelemediğiniz anahtarlar atılır, bu da bir ziyaretçinin bir forma role=admin ekleyip onu kaydettirmesini önler. country gönderilmediği için null olur. Bir web sunucusunda filter_input_array(INPUT_POST, $rules) doğrudan istekten okuyarak aynısını yapar.

Sıkça Sorulan Sorular

PHP'de bir e-posta adresini nasıl doğrularım?

Geçerliyse e-posta dizgesini, değilse false döndüren filter_var($email, FILTER_VALIDATE_EMAIL) kullanın: if (filter_var($email, FILTER_VALIDATE_EMAIL) === false) { /* invalid */ }. Yalnızca biçimi kontrol eder; adresin var olduğunu bilmek için bir onay e-postası gönderin.

PHP'de bir dizgenin tam sayı olup olmadığını nasıl kontrol ederim?

filter_var($s, FILTER_VALIDATE_INT) "42", "-7" ve " 42 " için int, "4.2", "42abc" veya "042" için false döndürür. !== false ile karşılaştırın, çünkü geçerli bir "0" falsy olan 0 döndürür.

filter_var 0 için neden false döndürüyor?

Döndürmüyor: filter_var('0', FILTER_VALIDATE_INT) 0 tam sayısını döndürür. Hata, 0 değerini false gibi ele alan if (filter_var(...)) kontrolündedir. if (filter_var($v, FILTER_VALIDATE_INT) !== false) yazın.

PHP 8.1'de FILTER_SANITIZE_STRING yerine ne geldi?

Doğrudan hiçbir şey; adı vermediği bir güvenliği vaat ettiği için kullanımdan kaldırıldı. Beklediğiniz girdiyi doğrulayın, olduğu gibi saklayın ve yazdırırken htmlspecialchars() ile kaçışlayın. Etiketlerin silinmesi gerekiyorsa strip_tags() kullanın.

filter_var ile filter_input arasındaki fark nedir?

filter_var() verdiğiniz herhangi bir değeri filtreler. filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT) doğrudan orijinal istekten okur, bu yüzden parametre eksik olduğunda null döndürür ve kodunuzun $_GET üzerinde yaptığı değişiklikleri yok sayar. İkisi de aynı filtreleri ve seçenekleri alır.

Coddy programlama dilleri çizimi

Coddy ile kodlamayı öğren

BAŞLA