我现在得到的错误结果是:17th of July, 2011Today is .
function finclude($file){
include($file);
}
$str = "Today is {include 'date.php'}.";
echo preg_replace("/\{include '(.*)\'}/e", 'finclude("$1")', $str);
date.php:
<?php echo date('jS \of F'); ?>, 2011
预期结果: Today is 17th of July.
答案 0 :(得分:2)
function finclude($file){
return include($file);
}
<?php return date('jS \of F'); ?>
不期望结果,因为您打印date
,然后finclude
返回null
,然后打印"Today is "+finclude
答案 1 :(得分:1)
您在结果顺序中调用的错误实际上是由语句的执行顺序引起的:
echo preg_replace("/\{include '(.*)\'}/e", 'finclude("$1")', $str);
将启动输出(echo
),然后调用preg_replace
函数。您使用e - eval
修饰符来执行代码,即函数finclude
。
所以finclude
先前执行 而不是preg_replace
将会返回它的结果。
因此,如果finclude
自行输出,则会在前面显示 preg_replace
的结果。
知道这是解决问题的一半。你很可能没有打算这个输出顺序(你的预期结果不同),你只是想让finclude
返回一个值而不是输出一些东西。要将输出转换为返回值,可以使用输出缓冲区:
function finclude($file){
ob_start();
include($file);
return ob_get_clean();
}
$str = "Today is {include 'date.php'}.";
echo preg_replace("/\{include '(.*)\'}/e", 'finclude("$1")', $str);
这将确保finclude
内的每个输出都将作为返回值返回。
完成后,您可以重复使用通常在搜索和替换操作中输出的现有代码/包含。但是,使用e
修饰符始终是危险的,通常应该防止它。所以要小心。
答案 2 :(得分:0)
我认为您需要将<?php return date('jS \of F'); ?>
放入date.php