1

我正在尝试通过模板变量显示一大段 HTML 文本,但它似乎没有处理 PHP。我目前在我看来使用它(这是codeigniter)

<?php dump($_SESSION); echo (isset($html) && !empty($html)) ? $html : show_404(); ?>

HTML 包含几个带有 php 标签的位置,我希望在页面回显时加载这些位置。有没有办法做到这一点?

我需要它从我传入的 HTML 变量中工作的主要原因是因为这是页面创建者的一部分,我需要能够在其中插入不是每个页面中的 php 条件。

4

3 回答 3

1

有一种方法可以做到,但这很糟糕:eval()

echo (isset($html) && !empty($html)) ? eval($html) : show_404();
于 2012-08-26T20:25:53.920 回答
1

我会亲自ob从一个文件中提取它,对其进行缓冲,然后使用它get_ob_clean来获取结果,如下所示:

    ob_start();
        include 'temp_file_with_html_in';
        $view = ob_get_contents();
    ob_end_clean();

笔记:

  • 你的英语不清楚,所以我不确定你想要什么
  • 这可能无法完全按照您的意愿工作

也许更好地解释什么$html是什么以及它的来源会有所帮助?

于 2012-08-26T20:37:56.213 回答
0

我能想到的最快方法(尽管如果我知道如何 创建可能会找到更好的解决方案$html)是将内容放入 tmp 文件中,然后包含它。然而,这确实是一个警告标志,表明程序存在架构问题(例如,为什么在创建 $html 时不能进行 php 插值?)

$tmpFile = tempnam('/tmp', 'my_app_namespace');
file_put_contents($tmpFile, $html);
include $tmpFile;
unlink($tmpFile); // cleanup

编辑,来自 Drupal 7

正如您在评论中暗示的那样,Drupal 7 确实包含我称之为技巧的东西:在您传递给的代码前添加一个 PHP结束eval标记,然后它将像常规 php 包含一样处理它:

从 Drupal 7 的 ./modules/php/php.module 中,大约第 79 行,做了一点修改:

ob_start();
print eval('?>' . $html);
$output = ob_get_clean();
于 2012-08-26T20:37:21.547 回答