PHP, Eval code result in a variable
PHP, Eval code result in a variable
我正在使用 eval 来执行来自数据库的 php 代码。该代码用于元标记和页面标题。一个示例如下所示(存储在 table 中):
$name . " test page title |".SiteSettings::getSiteNameAlternate();
然后在控制器中我执行此操作($seo 是具有 meta_title 的 object,并且该元素具有来自数据库的确切字符串):
$pageTitle = isset($seo->meta_title) ? @eval("echo $seo->meta_title") : null;
我正在使用 Larevel 框架并将该页面标题传递给 blade 模板,这很有效。 blade代码
<title>{{ isset($page_title) ? $page_title : SiteSettings::defaultPageTitle() }}</title>
问题是因为 eval 中的回显我在页面顶部也得到了页面标题。
我尝试使用 print(我知道这很蠢)和 printf。不工作。知道如何将 eval 的值放入变量中而不在屏幕上输出吗?
$pageTitle = isset($seo->meta_title) ? @eval("return $seo->meta_title;") : null;
如果设置了$seo->meta_title
,它会将$seo->meta_title
分配给$pageTitle
,否则null
。
如果我能正确理解你的问题,那么问题的出现是因为你在 eval
中做了一个 echo
然后将执行。因此,您应该将 $seo->meta_title
的值存储到变量中,然后让视图 echo
它。
在您的控制器中,如果 isset
,则将元标题值存储为页面标题,除非 null
$pageTitle = null;
if (isset($seo->meta_title)) {
$metaTitle = '';
eval("$metaTitle = \"$seo->meta_title\";");
$pageTitle = $metaTitle;
}
那么在你看来
<title>{{ isset($page_title) ? $page_title : SiteSettings::defaultPageTitle() }}</title>
存储结果的一个好方法是使用 ob_start、ob_get_contents 和 ob_end_clean
/*start buffering;*/
ob_start();
eval(echo isset($seo->meta_title) ? $seo->meta_title : "");
/* now catch the Buffer of the eval */
$pageTitle = ob_get_contents();
/* pageTitle contains now the value of the buffered echo */
/* stop buffering; */
ob_end_clean();
现在随心所欲地使用控制器
我正在使用 eval 来执行来自数据库的 php 代码。该代码用于元标记和页面标题。一个示例如下所示(存储在 table 中):
$name . " test page title |".SiteSettings::getSiteNameAlternate();
然后在控制器中我执行此操作($seo 是具有 meta_title 的 object,并且该元素具有来自数据库的确切字符串):
$pageTitle = isset($seo->meta_title) ? @eval("echo $seo->meta_title") : null;
我正在使用 Larevel 框架并将该页面标题传递给 blade 模板,这很有效。 blade代码
<title>{{ isset($page_title) ? $page_title : SiteSettings::defaultPageTitle() }}</title>
问题是因为 eval 中的回显我在页面顶部也得到了页面标题。
我尝试使用 print(我知道这很蠢)和 printf。不工作。知道如何将 eval 的值放入变量中而不在屏幕上输出吗?
$pageTitle = isset($seo->meta_title) ? @eval("return $seo->meta_title;") : null;
如果设置了$seo->meta_title
,它会将$seo->meta_title
分配给$pageTitle
,否则null
。
如果我能正确理解你的问题,那么问题的出现是因为你在 eval
中做了一个 echo
然后将执行。因此,您应该将 $seo->meta_title
的值存储到变量中,然后让视图 echo
它。
在您的控制器中,如果 isset
,则将元标题值存储为页面标题,除非 null
$pageTitle = null;
if (isset($seo->meta_title)) {
$metaTitle = '';
eval("$metaTitle = \"$seo->meta_title\";");
$pageTitle = $metaTitle;
}
那么在你看来
<title>{{ isset($page_title) ? $page_title : SiteSettings::defaultPageTitle() }}</title>
存储结果的一个好方法是使用 ob_start、ob_get_contents 和 ob_end_clean
/*start buffering;*/
ob_start();
eval(echo isset($seo->meta_title) ? $seo->meta_title : "");
/* now catch the Buffer of the eval */
$pageTitle = ob_get_contents();
/* pageTitle contains now the value of the buffered echo */
/* stop buffering; */
ob_end_clean();
现在随心所欲地使用控制器