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 协议》,转载必须注明作者和本文链接
雪花飘
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!