var_dump(preg_repalce('/.*/i','ok','2')); // string(4) "okok"
var_dump(preg_replace('/.*/i','ok','2333')); // string(4) "okok"
这两句的替换是如何发生的?
是否是后向引用,或者其他原因,麻烦详细解释下(不要仅说原因,解释下why)。
var_dump(preg_replace('/(.*)/ie','strtolower("\\1")','{${phpinfo()}}')); // phpinfo() 执行成功 并输出 string(0) ""
var_dump(preg_replace('/(.*)/ie','strtolower("{${phpinfo()}}")','{${phpinfo()}}')); // phpinfo() 执行成功 并输出 string(0) ""
// strtolower("{${phpinfo()}}") 执行后相当于 strtolower("{${1}}") 又相当于 strtolower("{null}") 又相当于 '' 空字符串
了解过可变变量,比如$a="hello"; $$a="world"; echo $a.${$a}; 。但是不理解这里的{${phpinfo()}}。
在PHP语言中单引号和双引号是有区别的,单引号代表纯字符串,双引号则会解析中间变量。
但是,eval(strtolower("{${phpinfo()}}"));中phpinfo()是如何执行phpinfo()是函数不是变量,如何解析。