PHP函数filter_var存在兼容性问题
最近在实现业务功能时,代码在发布到预发布环境后一直抛出异常,看了下源码发现是 filter_var 函数存在兼容性问题。如下分析:
filter_var() 函数通过指定的过滤器过滤一个变量,使用 filter_var($host, FILTER_VALIDATE_URL) 验证是否合法的URL
演示代码
<?php
$host = "http://www.badu.com?r=f/e";
$a = filter_var($host, FILTER_VALIDATE_URL);
var_export($a);
当 PHP 版是 5.5 时,一直返回 false;当 PHP 版本为 5.6 时,一直返回 $host 的值。
实际是 r=f/e 格式的参数处理有差异
解决方案:
1、因为用的是yii2 框架,r=f/e 参数格式其实是接口路由,改为 restful 的接口路由格式 $host = "[http://www.badu.com/f/e](https://link.zhihu.com/?target=http%3A//www.badu.com/f/e)";
(不影响上线的最快处理方案,采用该方案)
2、使用正则
备注:奇怪的是网上竟然没有找到该类问题的相关话题,是没有人遇到过吗?
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: