Upload file PHP (Bài trước)
(Bài tiếp) Hàm ẩn danh

Chức năng, cú pháp filter_var trong PHP

Hàm filter_var có chức năng kiểm tra sự phù hợp của dữ liệu, chức năng lọc biến đổi dữ liệu cho phù hợp, như có phải là một số nguyên không, có phải là một địa chỉ URL, loại bỏ chữ giữ lại số ..., cú pháp:

filter_var($value, int $filter, array|int $options = 0);

Trong đó $value là chuỗi (hoặc giá trị tự động chuyển thành chuỗi) được kiểm tra, xem có phù hợp với kiểu đánh giá/lọc được chỉ ra trong $filter. $options tham số thiết lập thêm về kiểu lọc. Hàm trả về dữ liệu phù hợp hoặc false nếu dữ liệu không phù hợp (trả về null nếu có cờ FILTER_NULL_ON_FAILURE).

Ví dụ, kiểm tra chuỗi có phải là một định dạng địa chỉ email

$email = 'hoclaptrinhphp@gmail';
$rs = filter_var($email, FILTER_VALIDATE_EMAIL);
if ($rs === false)
{
    echo $email, ' không phải địa chỉ email';
}
else
{
    echo $rs, ' là một địa chỉ email';
}

Các kiểu lọc $filter và tùy biến

Tham số filter chỉ ra hằng số tương ứng với bộ lọc, mỗi bộ lọc có thể có các thiết lập và cờ thiết lập xác định qua tham số $option, nhiều cờ thì có thể đưa vào một mảng hoặc phép toán bitwise:

Filter Cờ Diễn giải
KIỂM TRA DỮ LIỆU
FILTER_VALIDATE_BOOL Kiểm tra kiểu bool: Trả về true nếu dữ liệu bằng '1', 'yes', 'on', 'true' còn lại là false. Nếu có thiết lập cờ FILTER_NULL_ON_FAILURE thì trả về '0', 'false', 'off', 'no', '' còn lại không phải giá trị bool thì trả về null.
FILTER_VALIDATE_DOMAIN FILTER_FLAG_HOSTNAME Kiểm tra domain: Kiểm tra chiều dài chuỗi có phù hợp nhãn domain không (dài 63 ký tự). Nếu có cờ FILTER_FLAG_HOSTNAME thì nó sẽ kiểm tra có phù hợp là hostname (bắt đầu bởi chữ cái), trong chuỗi chỉ có chữ và số hoặc gạch nối
FILTER_VALIDATE_EMAIL FILTER_FLAG_EMAIL_UNICODE Kiểm tra là địa chỉ email
FILTER_VALIDATE_FLOAT FILTER_FLAG_ALLOW_THOUSAND Kiểm tra là số float
FILTER_VALIDATE_INT FILTER_FLAG_ALLOW_OCTAL
FILTER_FLAG_ALLOW_HEX
Kiểm tra là số int
FILTER_VALIDATE_IP FILTER_FLAG_IPV4
FILTER_FLAG_IPV6
Kiểm tra là địa chỉ IP
FILTER_VALIDATE_MAC Kiểm tra là địa chỉ MAC
FILTER_VALIDATE_REGEXP Kiểm tra là chuỗi mẫu biểu thức chính quy
FILTER_VALIDATE_URL FILTER_FLAG_QUERY_REQUIRED Kiểm tra là một địa chỉ URL
LỌC VÀ BIẾN ĐỔI DỮ LIỆU
FILTER_SANITIZE_EMAIL Loại bỏ các ký tự, chỉ giữ lại chữ, số và !#$%&'*+-=?^_`{|}~@.[]
FILTER_SANITIZE_ENCODED Encode chuỗi URL.
filter_var('https://đây-là-url.vn',
    FILTER_SANITIZE_ENCODED);
// https%3A%2F%2F%C4%91%C3%A2y-l%C3%A0-url.vn
FILTER_SANITIZE_ADD_SLASHES Chính là gọi hàm addslashes(): thêm ký tự '\' vào trước các ký tự nháy đơn ('), nháy kép ("), ký tự chéo người (\), mục đích ngăn tấn công SQL Injection khi câu truy vấn lưu trong chuỗi.
FILTER_SANITIZE_NUMBER_FLOAT FILTER_FLAG_ALLOW_FRACTION
FILTER_FLAG_ALLOW_THOUSAND
FILTER_FLAG_ALLOW_SCIENTIFIC
Giữ lại các ký tự biểu diễn số thực
filter_var('dsff 32.1227&**',
    FILTER_SANITIZE_NUMBER_FLOAT,
    FILTER_FLAG_ALLOW_FRACTION);
// 32.1227
FILTER_SANITIZE_NUMBER_INT Giữ lại các ký tự biểu diễn số nguyên
FILTER_SANITIZE_SPECIAL_CHARS HTML encode các ký tự đặc biệt
FILTER_SANITIZE_FULL_SPECIAL_CHARS Giống gọi htmlspecialchars(); thay các ký tự đặc biệt trong chuỗi : &, ', ", < > bằng mã tương ứng: &amp; &quot; &#039; &lt; &gt;
FILTER_SANITIZE_URL Bỏ tất cả các ký tự, chỉ giữ lại chữ, số và $-_.+!*'(),{}|\\^~[]`<>#%";/?:@&=

Hàm kiểm tra xem có là số nguyên không âm không.

function checkId($id="") {
    if(is_bool($id)){
        return false;
    }
    $id = trim($id);
    $options = array( 'options' => array( 'min_range' => 0 ) );
    if( !filter_var($id, FILTER_VALIDATE_INT, $options) ){
        return false;
    }
        return true;
}

filter_input trong PHP

Chức năng giống giống như filter_var, tuy nhiên dữ liệu kiểm tra lấy từ Http Request (người dùng gửi đến). Cú pháp như sau:

filter_input($type, $var_name, $filter, $options)

Trong đó: $type là nơi lấy giá trị dữ liệu để kiểm tra / biến đổi, bạn thiết lập nó bằng một trong các giá trị INPUT_GET, INPUT_POST, INPUT_COOKIE, INPUT_SERVER, INPUT_ENV. Tương ứng giá trị kiểm tra sẽ lấy từ mảng biến toàn cục $_GET,$_POST,$_COOKIE, $_SERVER, $_ENV. Xem các biến định nghĩa trước trong PHP

$var_name tên biến, tên phần tử lấy để kiểm tra. Ví dụ người dùng POST dữ liệu FORM lên trong FORM HTML giả sử có tên dữ liệu username, thì dữ liệu nằm trong mảng $_POST với tên (chỉ số) là $var_name = 'username'.

Còn $filter$options giống tham số của filter_var. Ví dụ, kiểm tra dữ liệu trong $_POST có tên username là địa chỉ email.

filter_input(INPUT_POST, 'username', FILTER_VALIDATE_EMAIL);

Đăng ký nhận bài viết mới
Upload file PHP (Bài trước)
(Bài tiếp) Hàm ẩn danh