【问题标题】:PHP str_replace to include function/file as part of a Templating systemPHP str_replace 将函数/文件作为模板系统的一部分包含在内
【发布时间】:2017-03-20 17:07:31
【问题描述】:

概述:我正在为我的网站制作一个诱人的系统,目前运行良好,并且正在按照我的预期工作,唯一的问题是当我希望显示类似 {PAGE_SIDEBAR} 的内容时文件 template/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 方法放置它的位置。

【问题讨论】:

  • 您在 {PAGE_SIDEBAR} 之后缺少一个报价
  • 啊,打错了,因为我为我的帖子单独输入了它

标签: php str-replace


【解决方案1】:

您必须使用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 了解入门知识。

【讨论】:

  • 好答案! include 是一种语言结构,而不是一个函数。
  • 绝对赢家,这是一个完美的解决方案。谢谢!
  • 只是想顺便说一下,三年后,这个答案真的帮助了我。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-01-30
  • 1970-01-01
  • 1970-01-01
  • 2013-04-18
  • 2011-04-18
  • 2020-05-23
  • 2011-04-16
相关资源
最近更新 更多