Eval函数介绍
Eval函数的语法如下:
eval ( string $code )
$code是字符串型变量,是需要执行的PHP代码。
代码不能包含打开/关闭 PHP tags。比如, 'echo "Hi!";' 不能这样传入:''。但仍然可以用合适的PHP tag来离开、重新进入PHP模式。比如 'echo "In PHP mode!"; ?>In HTML mode!
eval()的返回值为 NULL,除非在执行的代码中return了一个值,函数返回传递给 return 的值。 PHP 7 开始,执行的代码里如果有一个parse error,eval() 会抛出 ParseError 异常。在 PHP 7 之前, 如果在执行的代码中有parse error,eval() 返回 FALSE,之后的代码将正常执行。无法使用 set_error_handler() 捕获 eval() 中的解析错误。
preg_replace函数分析
preg_replace函数的语法如下:
preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] )
=
new=phpinfo()&pattern=/lammer/e&base=lammer
mixed 说明一个参数可以接受多种不同的(但不一定是所有的)类型。Int是整形变量。
中括号的意思是如果前一个参数存在,那么中括号中的参数可写可不写。例如:如果存在$subject参数,则$limit参数可有可无;如果不存在$limit参数,则$ count也不能出现。
pattern:
要搜索的模式。可以使一个字符串或字符串数组。
replacement:
用于替换的字符串或字符串数组。
当使用e 修饰符时,这个函数会转义一些字符(即:'、"、 \ 和 NULL) 然后进行后向引用替换。当这些完成后请确保后向引用解析完后没有单引号或 双引号引起的语法错误(比如: 'strlen(\'$1\')+strlen("$2")')。确保符合PHP的 字符串语法,并且符合eval语法。因为在完成替换后, 引擎会将结果字符串作为php代码使用eval方式进行评估并将返回值作为最终参与替换的字符串。
图5.1 preg_replace代码执行
subject:
要进行搜索和替换的字符串或字符串数组。
如果subject是一个数组,搜索和替换回在subject 的每一个元素上进行, 并且返回值也会是一个数组。
limit:
每个模式在每个subject上进行替换的最大次数。默认是 -1(无限)。
count:
如果指定,将会被填充为完成的替换次数。