可以看到上面的input方法中调用getData,代码如下:
根据poc,此时的$data=https://www.isolves.com/it/aq/hk/2020-07-19/用户的get以及post组成的数组,$name=axinprotected function getData(array $data, $name) { foreach (explode('.', $name) as $val) { if (isset($data[$val])) { $data = $data[$val]; } else { return; } } 这里的$data=$data[$name] return $data; }所以如果我们在post (post不行,没有深究)或者get中传入axin=calc,这里返回的数据就是calc 。接着input()函数又调用了getFilter,源码如下:
此处的$filter=''而不是null,$default=null protected function getFilter($filter, $default) { if (is_null($filter)) { $filter = []; } else {可以看到这儿把$this->filter赋值给了$filter,也就是poc中的system $filter = $filter ?: $this->filter; if (is_string($filter) && false === strpos($filter, '/')) { $filter = explode(',', $filter); } else { $filter = (array) $filter; } } $filter[] = $default;此处$filter=['system',null] return $filter; }最后input函数里执行到: $this->filterValue($data, $name, $filter);
而现在我们的$data为calc,$name为axin,$filter为system,我们带着这些数据进入filterValue.
private function filterValue(&$value, $key, $filters) { 这里移除了default的值,$filters数组里只剩下system $default = array_pop($filters); foreach ($filters as $filter) { if (is_callable($filter)) { // 调用函数或者方法过滤 echo "方法执行n"; 为了更加清晰的说明,我这里打印$filter与$value的值 。 echo "$filter为:".$filter."n $value为".$value; $value = call_user_func($filter, $value); } elseif (is_scalar($value)) { if (false !== strpos($filter, '/')) { // 正则过滤 if (!preg_match($filter, $value)) { // 匹配不成功返回默认值 $value = $default; break; } } elseif (!empty($filter)) { // filter函数不存在时, 则使用filter_var进行过滤 // filter为非整形值时, 调用filter_id取得过滤id $value = filter_var($value, is_int($filter) ? $filter : filter_id($filter)); if (false === $value) { $value = $default; break; } } } } return $value; }
推荐阅读
- 《金铲铲之战》黎明最强阵容是什么?
- 古茶树不能承受之重,古曼撒之冷庙古树茶
- 工夫红茶是什么意思,功夫红茶与工夫红茶字之差
- 父亲节走心茶礼,厨心熟茶品质口碑和品牌之路
- 广州旅游攻略之必去景点
- 高桥银峰的作用有哪些,高桥银峰营养成分分析
- 十大名菜之首 抗癌防癌并有“富硒食品”之称
- 凤宁号茶叶加盟信息,佛山市南海区春之茗茶叶加盟八方茶园
- 贡眉是福鼎白茶之,福鼎大白与福鼎大毫的关系
- 各用沏茶用水知识解说,沏茶用水之软水
