2011-12-14 25 views
6

Tôi nhận thấy có nhiều điều bạn có thể làm với hàm PHP filter_var cũng có thể được thực hiện với chức năng khác.PHP khi sử dụng filter_var thay vì các hàm php dựng sẵn

Ví dụ: các bộ lọc FILTER_VALIDATE_REGEXP, FILTER_SANITIZE_ENCODED và nhiều hơn nữa cũng có chức năng chuyên dụng tương ứng trong PHP.

Khi nào tôi nên sử dụng filter_var và khi nào tôi nên sử dụng các hàm PHP? Ưu điểm và nhược điểm là gì?

+1

sử dụng php_filter bất cứ lúc nào bạn có thể, đó là xây dựng-in (ít nhanh hơn và bạn có chắc bạn sử dụng xác nhận bên phải), nếu bạn không thể tìm thấy những gì bạn cần, sau đó sử dụng một tùy chỉnh một. –

+1

Tôi không nói về các chức năng tùy chỉnh, vì chức năng tích hợp sẵn sẽ luôn nhanh hơn. Tôi đã nói về các bộ lọc mà đã có một thay thế chức năng php bản địa. – Tiddo

+0

Tôi hiểu, nhưng nếu bạn sử dụng một preg_match, bạn sẽ phải tùy chỉnh regexp - Tôi nên nói, regexp tùy chỉnh với preg_match xin lỗi về sự nhầm lẫn –

Trả lời

7

Lợi thế của tiện ích mở rộng filter là bạn có mọi thứ ở một nơi.

Nhưng bạn nói đúng, nó không cung cấp nhiều tính năng mới lạ. Bạn có thể thực hiện hầu hết mọi thứ với các chức năng hiện có, cụ thể là preg_replace hoặc preg_match thay vì FILTER_VALIDATE_REGEXP. Hoặc định kiểu và sử dụng thông số htmlspecialchars thay vì tùy chọn bộ lọc.

Tuy nhiên, có filter_var_array, nơi một lợi ích trở nên rõ ràng. Bạn có thể lọc tải các biến cho mỗi cấu hình. Và bạn có thể ấn định trước một danh sách các bộ lọc để áp dụng tất cả cùng một lúc:

$_POST = filter_var_array($_POST, array(
    "text" => FILTER_SANITIZE_ENCODED, 
    "id" => FILTER_VALIDATE_INT, 
    "title" => FILTER_SANITIZE_ENCODED, 
)); 

Tôi thừa nhận đó là cơ bản một magic_quotes kích hoạt ví dụ, nhưng bạn sẽ có được hình ảnh. Thống nhất.

6

Cho đến ngày nay tôi đã không tìm thấy một cách nhanh hơn (hoặc tốt hơn) loại bỏ ký tự đặc biệt từ một chuỗi so với sử dụng filter_var

filter_var($string, FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_HIGH) 

Giống như nhiều điều trong PHP, có nhiều cách để làm cho họ. filter_var thuận tiện.

+0

Điều này có giữ cho mọi chức năng filter_var có chức năng tương đương khác không? Hoặc là điều này chỉ dành cho bộ lọc này? – Tiddo

+0

Có, tốt cho các phiên bản liên quan đến chuỗi. Hãy xem tại đây, bạn sẽ thấy FILTER_FLAG_STRIP_HIGH áp dụng cho một số –

+0

Ai sẽ bỏ phiếu này xuống? tại sao? –

1

Tôi chỉ cần chạy một bên microtime benchmark bên cạnh 50 lần so với preg_match trong một tuyên bố iffilter_var_array chứng thực dữ liệu chính xác cùng một thiết lập lại, đây là những kết quả microtime:

filter_var_array 
microtime: 0.000834226608276 

preg_match 
microtime: 0.000180006027222 

filter_var_array trông đẹp, nhưng là từ 4 đến 8 lần chậm hơn preg_match vì vậy nếu bạn có trang web lưu lượng truy cập cao và thích mã nhanh hơn, tôi sẽ giới thiệu preg_match.

Tuy nhiên, nếu bạn thích mã sạch đẹp và không thực sự quan tâm đến cách chạy, hãy sử dụng filter_var_array có thể quản lý dễ dàng hơn để áp dụng bộ lọc dễ dàng trên nhiều yêu cầu và đầu vào.

Nhưng loại này một cách dễ dàng cũng có thể đạt được bằng cách viết một hàm preg_match cho các kịch bản khác nhau như email hay chữ nhưng phải ghi nhớ preg_match an ninh khi viết regex ví dụ:

http://blog.php-security.org/archives/76-Holes-in-most-preg_match-filters.html

tôi sẽ thích nhìn thấy từ bi sử dụng bộ nhớ trên cả hai.

Hope this helps

+0

Tối ưu hóa sớm là gốc của ..., bạn biết đấy. –

Các vấn đề liên quan