在HTML字符串中回显PHP代码
我试图通过一个模板变量显示一块HTML文本,但它似乎没有处理PHP。我目前在我的观点中使用它(这是codeigniter)在HTML字符串中回显PHP代码,php,codeigniter,Php,Codeigniter,我试图通过一个模板变量显示一块HTML文本,但它似乎没有处理PHP。我目前在我的观点中使用它(这是codeigniter) HTML包含两个带有php标记的位置,我希望这些位置在页面被echo'd时被加载。有办法做到这一点吗 我需要它从我传入的HTML变量开始工作的主要原因是,这是页面创建者的一部分,我需要能够在其中扑通php条件,而不是在每个页面中 有一种方法可以做到这一点,但它不好:eval() 我能想到的最快的方法(尽管如果我知道$html是如何创建的,可能会找到更好的解决方案)是将内
HTML包含两个带有php标记的位置,我希望这些位置在页面被echo'd时被加载。有办法做到这一点吗
我需要它从我传入的HTML变量开始工作的主要原因是,这是页面创建者的一部分,我需要能够在其中扑通php条件,而不是在每个页面中 有一种方法可以做到这一点,但它不好:
eval()
我能想到的最快的方法(尽管如果我知道
$html
是如何创建的,可能会找到更好的解决方案)是将内容塞进一个tmp文件,然后将其包含在内。然而,这实际上是一个警告标志,表明程序存在架构问题(例如,为什么在创建$html时不能进行php插值?)
编辑,来自Drupal7
正如您在评论中所暗示的,Drupal 7确实包含我所说的技巧:在传递给eval
的代码中预先添加一个PHP结束标记,然后它将像普通PHP一样处理它,包括:
来自Drupal 7的./modules/php/php.module,第79行左右,稍作修改:
ob_start();
print eval('?>' . $html);
$output = ob_get_clean();
我个人会
ob
从一个文件中提取这个,缓冲它,然后使用get\u ob\u clean
得到结果,如下所示:
ob_start();
include 'temp_file_with_html_in';
$view = ob_get_contents();
ob_end_clean();
注:
- 你的英语不清楚,所以我不确定你到底想要什么
- 这可能不完全符合您的需要
也许更好地解释一下
$html
是什么以及它是如何来源的会有所帮助?因此$html
变量是一个字符串,其中包含听起来像是你想要做什么,这意味着你的设计可能有更根本的错误<代码>评估()==√邪恶
-不要这样做<代码>isset($var)&&!空($var)→ <代码>!空($var)-您不需要多余的isset
。如果$html
的内容类似于模板(即有人将被视为“邪恶”的东西投了更高的票),则eval将不起作用在编程和一些不应该对这个问题起作用的东西中?嗯……这可能会起作用,但我很好奇Drupal是如何做到的。他们在他们的文章中使用了类似的东西。我在Drupal 7中发现了一些有趣的东西,不确定这是否是他们在您提到的功能中使用的东西,但它可能更符合您的期望……注意,hoever,Drupal的./includes/文件夹包含许多强烈的评论,敦促人们不要使用eval。。。
$tmpFile = tempnam('/tmp', 'my_app_namespace');
file_put_contents($tmpFile, $html);
include $tmpFile;
unlink($tmpFile); // cleanup
ob_start();
print eval('?>' . $html);
$output = ob_get_clean();
ob_start();
include 'temp_file_with_html_in';
$view = ob_get_contents();
ob_end_clean();