{"id":231906,"date":"2023-01-02T11:08:00","date_gmt":"2023-01-02T08:08:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=231906"},"modified":"2023-01-02T11:24:43","modified_gmt":"2023-01-02T08:24:43","slug":"voce-deve-estar-usando-funcoes-de-filtragem-php-parte-1","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pt-pt\/voce-deve-estar-usando-funcoes-de-filtragem-php-parte-1\/","title":{"rendered":"Voc\u00ea deve estar usando fun\u00e7\u00f5es de filtragem PHP, parte 1"},"content":{"rendered":"\n<p>J\u00e1 falei sobre sanitiza\u00e7\u00e3o de dados no WordPress em <a href=\"https:\/\/wordpress.mediadoma.com\/pt-pt\/higienizando-urls-no-wordpress\/\" title=\"posts anteriores\">posts anteriores<\/a>. Este \u00e9 um t\u00f3pico importante n\u00e3o apenas para aqueles que trabalham para construir solu\u00e7\u00f5es para outros no WordPress, mas tamb\u00e9m para aqueles que est\u00e3o escrevendo c\u00f3digo que ir\u00e1 interagir diretamente com um banco de dados via PHP.<\/p>\n<p>Claro, existem fun\u00e7\u00f5es nativas do WordPress para facilitar esse processo, mas tamb\u00e9m existem fun\u00e7\u00f5es de filtragem PHP integradas para ajudar com isso. Ou seja <code>filter_var<\/code>, e <code>filter_input<\/code>e essas s\u00e3o coisas que eu acho que s\u00e3o \u00fateis para os desenvolvedores PHP saberem.<\/p>\n<h2>Fun\u00e7\u00f5es de Filtragem PHP, Parte 1: Vari\u00e1veis<\/h2>\n<p>A filtragem de vari\u00e1veis \u200b\u200b\u00e9 feita pela <code>filter_var<\/code>fun\u00e7\u00e3o apropriadamente nomeada. A defini\u00e7\u00e3o oficial \u00e9:<\/p>\n<blockquote>\n<p>Filtra uma vari\u00e1vel com um filtro especificado<\/p>\n<p><a href=\"https:\/\/www.php.net\/manual\/en\/function.filter-var.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">O manual do PHP<\/a><\/p>\n<\/blockquote>\n<p>A defini\u00e7\u00e3o em si pode parecer um pouco circular, especialmente se voc\u00ea est\u00e1 apenas come\u00e7ando com PHP ou usando fun\u00e7\u00f5es de filtragem. O importante a entender nesta defini\u00e7\u00e3o \u00e9 o que um filtro realmente \u00e9.<\/p>\n<p>Ent\u00e3o, se voc\u00ea est\u00e1 acostumado a trabalhar com, digamos, valores booleanos, n\u00fameros inteiros, endere\u00e7os de e-mail e assim por diante (e quem n\u00e3o est\u00e1?), ent\u00e3o faz mais sentido, n\u00e3o \u00e9? Ou seja, se voc\u00ea precisar fornecer algum tipo de valida\u00e7\u00e3o em torno desses tipos de valores, isso pode ajudar.<\/p>\n<p>O que \u00e9 \u00f3timo \u00e9 que, independentemente do que voc\u00ea est\u00e1 filtrando, ele <code>filter_var<\/code>retornar\u00e1 <code>false<\/code>sempre que o filtro falhar.<\/p>\n<p>Digamos que voc\u00ea queira filtrar um endere\u00e7o de e-mail, ent\u00e3o voc\u00ea pode fazer algo assim:<\/p>\n<ul>\n<li><code>filter_var($emailAddress,\u00a0FILTER_VALIDATE_EMAIL)<\/code>;<\/li>\n<\/ul>\n<p>Claro, n\u00e3o \u00e9 sem algumas pegadinhas. Por exemplo, ele n\u00e3o validar\u00e1 dom\u00ednios n\u00e3o latinos. Mais sobre isso momentaneamente.<\/p>\n<p>De qualquer forma, talvez voc\u00ea queira filtrar outros tipos de valores:<\/p>\n<ul>\n<li><code>filter_var($url,\u00a0FILTER_VALIDATE_URL)<\/code><\/li>\n<li><code>filter_var('1001',\u00a0FILTER_VALIDATE_INT)<\/code><\/li>\n<\/ul>\n<p>E voc\u00ea pode torn\u00e1-los mais complicados, dependendo de suas necessidades. Digamos, por exemplo, que voc\u00ea precise determinar se um IP \u00e9 p\u00fablico. Ent\u00e3o voc\u00ea pode usar algo mais elaborado como isto:<\/p>\n<ul>\n<li><code>filter_var($ip,\u00a0FILTER_VALIDATE_IP,\u00a0FILTER_FLAG_NO_PRIV_RANGE\u00a0|\u00a0FILTER_FLAG_NO_RES_RANGE)<\/code><\/li>\n<\/ul>\n<p>A quest\u00e3o \u00e9 que \u00e9 importante saber como <code>filter_var<\/code>funciona e quais filtros est\u00e3o dispon\u00edveis. Isso \u00e9 realmente onde a utilidade disso entra em jogo. Para isso, recomendo ler <a href=\"https:\/\/www.php.net\/manual\/en\/filter.filters.validate.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">os filtros de valida\u00e7\u00e3o que o PHP oferece.<\/a><\/p>\n<p>Por fim, lembre-se da observa\u00e7\u00e3o acima sobre dom\u00ednios n\u00e3o latinos com endere\u00e7os de e-mail? Existem alguns casos como este com determinados recursos que voc\u00ea precisar\u00e1 revisar o que o manual tem a dizer sobre determinados URLs, dom\u00ednios e assim por diante antes de us\u00e1-los.<\/p>\n<p>Nesses casos, infelizmente, <code>filter_var<\/code>nem sempre pode funcionar. Em vez disso, as express\u00f5es regulares podem ser uma substitui\u00e7\u00e3o adequada.<\/p>\n<h2>E quanto \u00e0 filtragem de entradas?<\/h2>\n<p>Se voc\u00ea tem experi\u00eancia em trabalhar tamb\u00e9m com vari\u00e1veis \u200b\u200bcomo <code>$_GET<\/code>e <code>$_POST<\/code>ent\u00e3o existe outra fun\u00e7\u00e3o de filtragem espec\u00edfica para isso.<\/p>\n<p>E no pr\u00f3ximo post, mostrarei como usar melhor os que muitos de n\u00f3s tradicionalmente usam.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte de grava\u00e7\u00e3o:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Existem fun\u00e7\u00f5es nativas do WordPress para facilitar a valida\u00e7\u00e3o, mas tamb\u00e9m existem fun\u00e7\u00f5es de filtragem PHP integradas.<\/p>\n","protected":false},"author":1,"featured_media":236152,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[898,753,722,837,806,785,846,867],"tags":[1170],"class_list":["post-231906","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codigo-2","category-codigo-aberto","category-desenvolvedor","category-guia-para-iniciantes","category-php-8","category-software-livre","category-tutoriais","category-wordpress-8","tag-affiai-pt-pt"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/231906","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/comments?post=231906"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/231906\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media\/236152"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media?parent=231906"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/categories?post=231906"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/tags?post=231906"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}