← Back to PHP Course | Chapter 10: Forms & Validation | Lesson 6 of 8

PHP Filters

Filters किसी door पर चीज़ें check करने वाले एक security guard जैसे हैं: वे decide करते हैं कि email या number जैसी कोई value अंदर आने की अनुमति है या नहीं। PHP value को साफ भी कर सकता है ताकि यह safe हो।
Syntax
php
$result = filter_var($value, FILTER_VALIDATE_EMAIL);   // value, or false
$result = filter_var($value, FILTER_VALIDATE_INT);
$result = filter_var($value, FILTER_VALIDATE_URL);
$result = filter_var($value, FILTER_VALIDATE_BOOLEAN);

filter_var() क्या है?

filter_var() एक ही function call में एक single value को एक named filter के against validate या sanitize करता है, success पर cleaned value return करते हुए या failure पर false।

यह उस validation logic को centralize करता है जो अन्यथा regular expressions और manual checks में बिखरी होती।

उदाहरण: What is filter_var()?

php
<?php
// Declare `$email`, set to "[email protected]"
$email = "[email protected]";
// Declare `$result`, set to `filter_var($email, FILTER_VALIDATE_EMAIL)`
$result = filter_var($email, FILTER_VALIDATE_EMAIL);
// Print `$result` to the output
echo $result;
?>

Email और Integers Validate करना

FILTER_VALIDATE_EMAIL किसी string को एक valid email address के structural rules के against check करता है, और FILTER_VALIDATE_INT confirm करता है कि एक value genuinely एक integer है — दोनों throw करने के बजाय failure पर false return करते हैं, इसलिए result को हमेशा === false से check करना ज़रूरी है, सिर्फ falsy checks से नहीं।

उदाहरण: Validating Email and Integers

php
<?php
// Print a detailed dump (with types) of `filter_var("[email protected]", FILTER_VALIDATE_EMAIL) === false`
var_dump(filter_var("[email protected]", FILTER_VALIDATE_EMAIL) === false);
// Print a detailed dump (with types) of `filter_var("42", FILTER_VALIDATE_INT) === false`
var_dump(filter_var("42", FILTER_VALIDATE_INT) === false);
?>

URLs और Booleans Validate करना

FILTER_VALIDATE_URL confirm करता है कि एक string एक well-formed URL है, जबकि FILTER_VALIDATE_BOOLEAN "yes", "1", और "off" जैसी common truthy/falsy strings को एक real boolean value में interpret करता है, जो एक plain PHP boolean cast से ज़्यादा forgiving है।

उदाहरण: Validating URLs and Booleans

php
<?php
// Print a detailed dump (with types) of `filter_var("https://example.com", FILTER_VALIDATE_URL)`
var_dump(filter_var("https://example.com", FILTER_VALIDATE_URL));
// Print a detailed dump (with types) of `filter_var("yes", FILTER_VALIDATE_BOOLEAN)`
var_dump(filter_var("yes", FILTER_VALIDATE_BOOLEAN));
?>

Input Sanitize करना

FILTER_SANITIZE_STRING (या htmlspecialchars इस्तेमाल करने वाला इसका modern replacement) और FILTER_SANITIZE_EMAIL जैसे sanitizing filters किसी value से unwanted characters strip या encode करते हैं इसे पूरी तरह reject करने के बजाय — तब उपयोगी जब आप safe display के लिए input साफ करना चाहते हों, सिर्फ इसका shape verify करना न हो।

उदाहरण: Sanitizing Input

php
<?php
// Declare `$comment`, set to "<b>Hello</b>"
$comment = "<b>Hello</b>";
// Print `htmlspecialchars($comment) . "\n"` to the output
echo htmlspecialchars($comment) . "\n";
// Print `filter_var("user@ example.com", FILTER_SANITIZE_EMAIL)` to the output
echo filter_var("user@ example.com", FILTER_SANITIZE_EMAIL);
?>

Untrusted Input के लिए Filtering क्यों मायने रखती है

$_GET, $_POST, या $_COOKIE से आने वाले किसी भी data को तब तक untrusted माना जाना चाहिए जब तक साबित न हो जाए, क्योंकि एक user (या एक attacker) पूरी तरह control करता है कि क्या भेजा गया है।

Entry point पर filtering malformed या malicious data को किसी database query तक पहुँचने या HTML में वापस echo होने से पहले पकड़ लेती है।

उदाहरण: Why Filtering Matters for Untrusted Input

php
<?php
// Set `$_GET['id']` to "5 OR 1=1"
$_GET['id'] = "5 OR 1=1";
// Declare `$id`, set to `filter_var($_GET['id'], FILTER_VALIDATE_INT)`
$id = filter_var($_GET['id'], FILTER_VALIDATE_INT);
// Print a detailed dump (with types) of `$id`
var_dump($id);
?>
Related Topics
{# common_mistakes/chapter_summary/browser_support: on Hindi pages the view already swaps in the hi_ translation fields (or blanks these out if untranslated), so this renders correctly for both languages without a lang_code check here. #}
आम गलतियां
  1. filter_var के result को एक loose check से test करना, ताकि एक valid 0 failure जैसा दिखे; false से compare करें।
  2. यह उम्मीद करना कि FILTER_VALIDATE_BOOLEAN invalid input के लिए false return करेगा, जबकि इसे FILTER_NULL_ON_FAILURE चाहिए।
  3. एक sanitize filter इस्तेमाल करना जब एक validate filter की ज़रूरत हो।
🔒

Chapter Quiz — Complete all 8 topics to unlock

0/8 topics done

Complete these topics first:

Login to run this code

C/C++/Java/PHP execution requires a free account. Your code is saved — you'll land right back in the editor after logging in.