Laravel 7 очистка данных формы

Я новичок в Laravel 7 и мне интересно, есть ли готовое элегантное решение для очистки ввода HTML-формы? Или, может быть, я могу загрузить доверенный сторонний пакет, который вы порекомендуете? Это для данных, которые я буду хранить в базе данных. Спасибо за любую помощь.


person GTS Joe    schedule 26.08.2020    source источник


Ответы (1)


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

При работе с проектами Laravel мне нравится использовать библиотеку voku/portable-ascii, поскольку она уже зависимость от фреймворка. Это хороший набор функций для очистки ввода, удаления непечатаемых символов и преобразования любого ввода в ASCII с транслитерацией и прочим. Это не всегда идеально, но обычно достаточно хорошо и выполняет свою работу.

Это всегда зависит от того, что вы хотите дезинфицировать, как и почему. Во многих ситуациях вам вообще не нужно дезинфицировать ввод, если вы придерживаетесь лучших практик. При работе с Eloquent или Query Builder ваши данные автоматически экранируются и извлекаются, когда вы их выводите, например. через {{ $data }} они тоже будут должным образом экранированы.

В некоторых ситуациях вам следует быть более осторожным, особенно если вы сами обрабатываете необработанный пользовательский ввод и, возможно, передаете его системе в параметрах командной строки, именах файлов и т. д. В таких случаях, как правило, рекомендуется быть как можно более ограничительным и разрешающим, насколько это необходимо. Иногда старый добрый preg_replace('/[^0-9A-Z_-]/i', '', $subject) — правильный выбор. Если вы хотите быть максимально снисходительным, попробуйте приведенные выше предложения.

person Lupinity Labs    schedule 26.08.2020
comment
Я должен был указать это в своем вопросе. Данные, которые мне нужно очистить, довольно стандартны: имя, адрес электронной почты, номер телефона и флажок. Вот и все! :-) - person GTS Joe; 26.08.2020
comment
Функция PHP filter_var, о которой вы упомянули, выглядит круто и работает с электронной почтой, но номера телефонов в США странным образом опущены. - person GTS Joe; 26.08.2020
comment
Фильтры очистки позаботятся об очистке электронной почты за вас. Имена обычно не нужно дезинфицировать, если только вы не хотите удалить надоедливые значки, символы RTL и тому подобное. Телефонные номера... ну, вам действительно нужна санация или проверка? Дезинфекция проста: preg_replace('/[^0-9\(\)\- ]/', '', $number) должен позаботиться о большей части этого. Кроме того, вы можете использовать проверку формы HTML5, см. разработчик .mozilla.org/en-US/docs/Web/HTML/Element/input/email или тел и т. д. Для проверки см. laravel.com/docs/7.x/validation. - person Lupinity Labs; 26.08.2020
comment
Неудивительно, что номера телефонов в США опущены. Не путайте очистку с проверкой. Для проверки правдоподобности телефонных номеров вам потребуются наборы правил или даже базы данных, которые очень специфичны для разных стран. Если вам нужна очень простая проверка, регулярное выражение — ваш друг. На эту тему уже есть сотни ответов, например stackoverflow.com/questions/9776231/ - person Lupinity Labs; 26.08.2020