{"id":231521,"date":"2023-01-02T10:30:00","date_gmt":"2023-01-02T07:30:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=231521"},"modified":"2023-01-02T10:33:35","modified_gmt":"2023-01-02T07:33:35","slug":"deberia-estar-usando-funciones-de-filtrado-de-php-parte-1","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/es\/deberia-estar-usando-funciones-de-filtrado-de-php-parte-1\/","title":{"rendered":"Deber\u00eda estar usando funciones de filtrado de PHP, parte 1"},"content":{"rendered":"\n<p>He hablado sobre el saneamiento de datos en WordPress en <a href=\"https:\/\/wordpress.mediadoma.com\/es\/desinfectando-urls-en-wordpress\/\" title=\"publicaciones anteriores\">publicaciones anteriores<\/a>. Este es un tema que es importante no solo para aquellos de nosotros que trabajamos para crear soluciones para otros en WordPress, sino tambi\u00e9n para aquellos que escriben c\u00f3digo que interactuar\u00e1 directamente con una base de datos a trav\u00e9s de PHP.<\/p>\n<p>Claro, hay funciones nativas de WordPress para facilitar este proceso, pero tambi\u00e9n hay funciones de filtrado de PHP integradas para ayudar con esto. Es decir <code>filter_var<\/code>, y <code>filter_input<\/code>estas son cosas que creo que son \u00fatiles para que los desarrolladores de PHP sepan.<\/p>\n<h2>Funciones de filtrado de PHP, Parte 1: Variables<\/h2>\n<p>El filtrado de variables se realiza mediante la <code>filter_var<\/code>funci\u00f3n acertadamente nombrada. La definici\u00f3n oficial es:<\/p>\n<blockquote>\n<p>Filtra una variable con un 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\">El manual de PHP<\/a><\/p>\n<\/blockquote>\n<p>La definici\u00f3n en s\u00ed puede leerse un poco circular, especialmente si reci\u00e9n est\u00e1 comenzando con PHP o con el uso de funciones de filtrado. Lo importante que hay que entender en esta definici\u00f3n es qu\u00e9 es realmente un filtro.<\/p>\n<p>Entonces, si est\u00e1 acostumbrado a trabajar con, digamos, valores booleanos, n\u00fameros enteros, direcciones de correo electr\u00f3nico, etc. (\u00bfy qui\u00e9n no lo est\u00e1?), entonces tiene m\u00e1s sentido, \u00bfno? Es decir, si necesita proporcionar alg\u00fan tipo de validaci\u00f3n en torno a esos tipos de valores, esto puede ayudar.<\/p>\n<p>Lo bueno es que, independientemente de lo que est\u00e9 filtrando, <code>filter_var<\/code>regresar\u00e1 <code>false<\/code>cada vez que el filtro falle.<\/p>\n<p>Digamos que desea filtrar una direcci\u00f3n de correo electr\u00f3nico, luego puede hacer algo como esto:<\/p>\n<ul>\n<li><code>filter_var($emailAddress,\u00a0FILTER_VALIDATE_EMAIL)<\/code>;<\/li>\n<\/ul>\n<p>Por supuesto, no es sin algunas trampas. Por ejemplo, no validar\u00e1 dominios no latinos. M\u00e1s sobre esto moment\u00e1neamente.<\/p>\n<p>De todos modos, tal vez quieras filtrar otros 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>Y puedes hacerlos m\u00e1s complicados dependiendo de tus necesidades. Digamos, por ejemplo, que necesita determinar si una IP es p\u00fablica. Entonces puedes usar algo m\u00e1s elaborado como esto:<\/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>La cuesti\u00f3n es que es importante saber c\u00f3mo <code>filter_var<\/code>funciona y qu\u00e9 filtros est\u00e1n disponibles. Ah\u00ed es realmente donde entra en juego la utilidad de esto. Con ese fin, recomiendo leer <a href=\"https:\/\/www.php.net\/manual\/en\/filter.filters.validate.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">los filtros de validaci\u00f3n que ofrece PHP.<\/a><\/p>\n<p>Finalmente, \u00bfrecuerda la nota anterior sobre dominios no latinos con direcciones de correo electr\u00f3nico? Hay algunos casos como este con ciertas caracter\u00edsticas que deber\u00e1 revisar lo que dice el manual con respecto a ciertas URL, dominios, etc. antes de usarlos.<\/p>\n<p>En esos casos, por desgracia, <code>filter_var<\/code>puede que no siempre funcione. En su lugar, las expresiones regulares pueden ser un reemplazo adecuado.<\/p>\n<h2>\u00bfQu\u00e9 pasa con el filtrado de entradas?<\/h2>\n<p>Si tiene experiencia trabajando tambi\u00e9n con variables como <code>$_GET<\/code>y <code>$_POST<\/code>entonces hay otra funci\u00f3n de filtrado espec\u00edficamente para eso.<\/p>\n<p>Y en la pr\u00f3xima publicaci\u00f3n, explicar\u00e9 c\u00f3mo usar mejor los que muchos de nosotros usamos tradicionalmente.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fuente de grabaci\u00f3n:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hay funciones nativas de WordPress para facilitar la validaci\u00f3n, pero tambi\u00e9n hay funciones de filtrado de 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":[892,716,747,831,800,779,840,861],"tags":[1172],"class_list":["post-231521","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codigo","category-desarrollador","category-fuente-abierta","category-guia-para-principiantes","category-php-2","category-software-de-codigo-abierto","category-tutoriales","category-wordpress-2","tag-affiai-es"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/231521","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/comments?post=231521"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/231521\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media\/236152"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media?parent=231521"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/categories?post=231521"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/tags?post=231521"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}