Ser*_*rge 5 php pcre preg-replace echo
我正在寻找 eval() 的替代方法来执行字符串变量中包含的代码,并注意到了preg_replacewith/e修饰符。然而,代码的计算方式非常奇怪。
例如,echo()在 php 5.3.6 中会导致错误:
<?php
$code = 'echo( \'Hello, world!\'.PHP_EOL)';
preg_replace('/(.*)/e', $code, '' );
?>
Run Code Online (Sandbox Code Playgroud)
错误信息:
解析错误:语法错误,/Users/.../test.php(4) 中出现意外的 T_ECHO:正则表达式代码在线
致命错误:preg_replace():无法评估代码:
echo('Hello, world!'.PHP_EOL) in /Users/.../test.php on line 4
当print()工作时,并输出一个Hello, world! :
<?php
$code = 'print( \'Hello, world!\'.PHP_EOL)';
preg_replace('/(.*)/e', $code, '' );
?>
Run Code Online (Sandbox Code Playgroud)
另外,似乎在几行代码中,只执行了第一行:
<?php
$t=1;
$code = '$t++;$t++;';
preg_replace('/(.*)/e', $code, '' );
echo $t;
?>
Run Code Online (Sandbox Code Playgroud)
输出2,而不是3。
问题:PCRE 中的代码评估是否preg_replace()记录在某处?在 php.net 上找不到
preg_replace /eeval 不计算语句,而只是计算单个表达式。
print()
Run Code Online (Sandbox Code Playgroud)
是一种表达。
echo ...;
Run Code Online (Sandbox Code Playgroud)
不是。
同样,任何后面可以跟分号的内容也是如此。
有关粗略概述,请参阅http://www.php.net/manual/en/language.expressions.php 。
| 归档时间: |
|
| 查看次数: |
11428 次 |
| 最近记录: |