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: & " ' < > | |
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
và $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);