PHP str_replace包含函数/文件作为模板系统的一部分

时间:2012-07-04 10:49:13

标签: php str-replace

概述:我正在为我的网站制作一个诱人的系统,目前进展顺利,并且它正在按照我的预期工作,当我希望显示像{PAGE_SIDEBAR}这样的东西时,会出现唯一的问题文件模板/ sidebar.php或类似的东西。

我正在使用

//loads of other str_replace here
$body = str_replace("{PAGE_SIDEBAR}, include("template/sidebar.php"), $body);
echo $body;

这是有效的,但是它包含在正文开头的文件,而不是{PAGE_SIDEBAR}所在的位置。标签所在的位置显示数字1。

请参阅屏幕截图以获得更好的解释:

How the rendered template looks before

Using the insert code above

此外,对于兴趣点,使用file_get_contents()而不是include()看起来如何:http:// www.jamesmoorhouse.co.uk/stack_overflow/str_replace/file_get_contents_method.png

理想情况下,我希望它能像include方法一样工作,但是会显示file_get_contents方法放置的位置。

1 个答案:

答案 0 :(得分:8)

您必须使用output buffering捕获include吐出的所有内容,以便能够将其用作字符串:

ob_start();
include("template/sidebar.php");
$str_sidebar = ob_get_clean();
$body = str_replace("{PAGE_SIDEBAR}", $str_sidebar, $body);
echo $body;

如果有许多占位符要替换,您可能希望使用带回调的基于正则表达式的解决方案,这样您就不必为每个占位符重复此代码。请参阅我的回答here获取初级读本。