<rmcreative>

RSS

Валидация данных в PHP при помощи filter_var

11 февраля 2009

Основой безопасности любого приложения является простое правило: «пришедшим от пользователя данным доверять нельзя». Для этой цели пишется довольно большое количество кода, хотя типичные задачи можно решить стандартными средствами PHP ничего не изобретая.

Например, таким образом можно проверить адрес e-mail при помощи filter_var:

if (filter_var($user_email, FILTER_VALIDATE_EMAIL)) {
  // правильный
}

также можно убрать лишнее, например, из URL:

$sanitized_url = filter_var($url, FILTER_SANITIZE_URL);

Хотя filter_var() есть в стандартном PHP начиная с версии 5.2.0, документация на него, особенно русская, хромает.

Нормальная документация и примеры:

Руководство w3schools.

Input Validation: Using filter_var() Over Regular Expressions.

Data Filtering Using PHP's Filter Functions

Комментарии RSS

  1. №1243
    Чистяков Денис
    Чистяков Денис 11.02.2009, 8:30:47

    Спасибо за интересную находку, впервые слышу об этой функции, пошел изучать мануалы…

  2. №1244
    Нурлан
    Нурлан 11.02.2009, 9:25:05

    Во многих дистрибутивах Linux ещё до версии 5.2 не добрались, поэтому пока рановато.

  3. №1245
    dohlik
    dohlik 11.02.2009, 9:37:46

    Еще бы знать, как она там внутри все это проверяет... Если теми же регэкспами, то наверное лучше свои использовать - гибче однако. Хотя наверняка эта функция пошустрее будет

  4. №1246
    Леонард
    Леонард 11.02.2009, 10:24:35

    Можно спросить, оно проверяет просто формат мейла или существует ли он реально?

  5. №1247
    Алексей Качаев
    Алексей Качаев 11.02.2009, 11:46:47

    2Леонард:

    Судя по названию функции filter_VAR, она проверяет только прогоняет переменную через указанных "фильтр" и говорит, прошло или нет :) Проверка существования имейла это совершенно другая история.

  6. №1248
    Морозов
    Морозов 11.02.2009, 11:52:08

    Чего ж тогда ее родимую в Zend_Validate не используют? :)

  7. №1249
    DeadLy
    DeadLy 11.02.2009, 12:20:54

    не гуд

    string(28) "bobd@example.comzsdsadfsdfsd"

  8. №1250
    Sam
    Sam 11.02.2009, 13:25:05

    Почему не гуд? Вполне может быть. Особенно, если мыло внутреннее корпоративное, а домен comzsdsadfsdfsd.

  9. №1611
    Герман
    Герман 05.06.2009, 17:34:12

    По поводу документации это да, я искал очень долго хоть чтото про filter_var, чтобы корректо его использовать - спасибо вам - нашел.

  10. №1843
    mihdan
    mihdan 21.09.2009, 16:08:30

    echo filter_var('1@1', FILTER_VALIDATE_EMAI) - говорит что мыло верное ;(

    echo filter_var('-1@1', FILTER_VALIDATE_EMAI) - говорит что мыло верное ;(

    echo filter_var('_1@1', FILTER_VALIDATE_EMAI) - говорит что мыло верное ;(

  11. №1956
    Holy Diver
    Holy Diver 03.11.2009, 11:06:32

    mihdan, у меня эти мыла не пропускает, версия PHP 5.3.

    Да, filter_var очень полезная функция, но жаль что очень загадочная.

    P.S. ссылка Data Filtering Using PHP's Filter Functions - битая!

  12. №2315
    Anton
    Anton 18.02.2010, 19:29:26

    ** Алексей Качаев ** спасибо КЭП.

    по сабжу самый кал оказался когда быстрой альтернативы для РНР < 5.2 не нашел :(

  13. №3202
    Bacifer
    Bacifer 11.10.2010, 12:30:35

    FILTER_SANITIZE_URL что с урлом делает, расписали бы поподробнее. А так же хотелось бы узнать и про остальные ключи функции если они есть. Спасибо.

  14. №3203
    Sam
    Sam 11.10.2010, 19:34:15

    Bacifer, вроде в посте есть ссылка на полное описание.

  15. №3534
    EnChikiben
    EnChikiben 07.12.2010, 10:51:08

    Bacifer, вроде в посте есть ссылка на полное описание.

    Спасибо за полное описание а то на php.net нет ни чего!

  16. №5596
    ich
    ich 16.11.2011, 12:55:11

    http://www.codeharmony.ru/materials/17

  17. №5690
    Александр
    Александр 16.12.2011, 12:06:25

    Век живи - век учись. Спасибо за заметку. Навела на определенные мысли.

  18. №7193
    Стас
    Стас 06.12.2012, 19:05:40

    Тоже недавно узнал о ней!

  1. Почта опубликована не будет.

  2. Можно использовать синтаксис Markdown или HTML.

  3. Введите ответ в поле. Щёлкните, чтобы получить другую задачу.