首页 » 随口说 » 正文

PHP中很屌但经常被各种忽略的过滤器函数

    PHP有些函数被各种小伙伴用烂了。但是也有一些好函数经常被忽略,以至于有些功能其实PHP内置函数都能解决,而我们小伙伴依然会通过各种稀奇古怪的方法来绕弯走。这里我们说的最常见的就是过滤。

  我写两个出来,大家体验一下。

一、filter_has_var 函数

  譬如你还在用  if(isset($_GET[“name”]) 来判断GET参数 中有name这个参数吗? 或者post参数、或者cookie里

  filter_has_var(INPUT_GET, ‘name’) 可以直接返回true或false

  第一个参数 可以填 INPUT_GET、 INPUT_POST、 INPUT_COOKIE、 INPUT_SERVER、 INPUT_ENV
  看英文你应该知道 是干啥的

二、filter_var 函数

  你还在辛辛苦苦的用正则等方式 来验证 字符串是否为email格式吗?

  echo filter_var(‘shenyi@hishenyi.com, FILTER_VALIDATE_EMAIL);

  如果OK 会返回原值,如果不OK 则返回false

  第二个参数有哪些

  验证为主:

  1、FILTER_VALIDATE_BOOLEAN   .当第一个参数是”1″, “true”, “on” and “yes” 这些字符串时会返回true .否则为false 。所以当用户输入一些 类似布尔类型的值时,你就无需一个个去写if else了。这个参数帮你搞定自动转换

  2、FILTER_VALIDATE_EMAIL  你懂得 ,上面已经演示过了。自己想

  3、FILTER_VALIDATE_FLOAT  你懂得

  4、FILTER_VALIDATE_INT 你懂得

  5、FILTER_VALIDATE_IP 你更加懂

  6、FILTER_VALIDATE_MAC  是否是mac地址。(不要认为是mac电脑,你觉得可能吗?)

  7、FILTER_VALIDATE_REGEXP  判断是否是正则表达式(基于PCRE)。这个很有用哦。尤其做后台时,管理员可能需要进行正则内容的填写。你可以用来判断

  8、FILTER_VALIDATE_URL 是否是正规的URL

 净化过滤 (比较多,我挑几个比较屌的)

   1、FILTER_SANITIZE_NUMBER_INT   过滤掉非数字型的内容。这个很屌哦

   echo filter_var(‘fuck123’, FILTER_SANITIZE_NUMBER_INT);   直接返回123 ,你懂的

   2、FILTER_SANITIZE_MAGIC_QUOTES 看列子

  echo filter_var(“fuck’123”, FILTER_SANITIZE_MAGIC_QUOTES);   会输出fuck\’123 .好比执行了 addslashes()

   3 、FILTER_SANITIZE_STRING  看例子

     echo filter_var(“<fuck>123</fuck>”, FILTER_SANITIZE_STRING);  会输出123

 
   echo filter_var ( “fuck < 5 >6”, FILTER_SANITIZE_STRING); 会输出fuck6 .注意,你如果用 echo strip_tags($str); 是过滤不掉的哦

 

  这个函数还有第三个参数的,可以用来控制一些默认值的返回。请亲自己动一下手

 觉得强大吗? 如果强大,那么接下来就要自己动手试了。别指望别人帮你写全。请参考永恒的宇宙文档

  http://php.net/manual/zh/ref.filter.php

 永远不要完全相信网上的文章、包括我的文章或者教科书。要相信老外的文档(当然,部分文档也有错误,但是一旦发生问题,官方文档往往是最靠谱的)

本文共 6 个回复

  • 匿名 2017/08/24 08:38

    沈老师,我在51cto学习你几年前的php微电商开发,受益匪浅。有个问题向您请教:关于memcache,您的课程中是将一个比较简单的字符串进行了缓存演示,淡如果是想将电商数据查询结果用memcache怎么实现呢(即用户访问了A页面,那么5分钟之内他再访问A页面,则不需要查询数据库),我用NOTORM将查询结果set时,提示pdo 对象不能序列号。请指教。

    • 匿名 2017/08/24 12:41

      @ 把查询出来的值变成普通数组,序列化后当做字符串插入到mem里即可

      • 匿名 2017/08/24 21:08

        @ 把查询出来的值变成普通数组?您能再进一步说说这个吗,我百度了很久没有相应的方法。谢谢!

      • 匿名 2017/08/24 22:49

        @ 我又搞了一下 ,发现是Object(NotORM_Result)不能序列化,如您说的,可以将其转化成普通数组,但结果是NULL,这样就造成了无法反向从普通数组转化成Object(NotORM_Result)。您能出一款NOTORM和memcache共同工作的教程吗?

        • 匿名 2017/08/25 11:28

          @ 循环 和遍历notorm_result 。然后把结果加入到一个 自己创建的普通数组里。 就可以序列化了

  • 匿名 2017/09/27 11:35

发表评论