PHP, когда использовать filter_var вместо встроенных функций php - PullRequest
6 голосов
/ 14 декабря 2011

Я заметил, что есть много вещей, которые вы можете сделать с функцией PHP filter_var, что также можно сделать с другой функцией.

Например, фильтры FILTER_VALIDATE_REGEXP, FILTER_SANITIZE_ENCODED и многие другие также имеют свои соответствующие выделенные функции в PHP.

Когда я должен использовать filter_var и когда я должен использовать функции PHP?Каковы преимущества и недостатки?

Ответы [ 3 ]

8 голосов
/ 14 декабря 2011

Преимущество расширения filter заключается в том, что у вас есть все в одном месте.

Но вы правы, это не дает много новых функций. Вы можете выполнять большую часть работы с существующими функциями, в частности preg_replace или preg_match вместо FILTER_VALIDATE_REGEXP. Или приведение типа и использование обычного htmlspecialchars вместо параметра фильтра.

Однако существует filter_var_array, где одно преимущество становится очевидным. Вы можете отфильтровать множество переменных в конфигурации. И вы можете заранее определить список фильтров для применения сразу :

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

Я признаю, что это в основном триггерный пример magic_quotes, но вы получите картину. Унификация.

7 голосов
/ 14 декабря 2011

На сегодняшний день я не нашел более быстрого (или лучшего) способа удаления специальных символов из строки, чем использование filter_var

filter_var($string, FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_HIGH)

Как и многие другие вещи в PHP, существует несколько способов их выполнения.,filter_var - это удобно.

1 голос
/ 13 ноября 2013

Я просто 50 раз подряд запускаю бенчмарк микротайма против preg_match в операторе if и filter_var_array проверяем те же самые данные сброса, вот результаты микротайма:

filter_var_array
microtime: 0.000834226608276

preg_match
microtime: 0.000180006027222

filter_var_array выглядит симпатично, но в 4-8 раз медленнее, чем preg_match, поэтому, если у вас есть сайт с большим трафиком и вы предпочитаете быстрый код, я бы порекомендовал preg_match.

Однако, если вам нравится хороший чистый кодна самом деле все равно, как он работает, тогда используйте filter_var_array, который может быть более управляемым для применения простых фильтров для запросов и входных данных многих форм.

Но такого рода легкость также может быть достигнута написанием функции preg_matchдля различных сценариев, таких как электронная почта или алфавитно-цифровая, но помните preg_match безопасность при написании регулярного выражения, например:

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

Я хотел бы также видеть сострадание к использованию памяти на обоих.

Надеюсь, это поможет

...