如何对数据库中存储的php代码使用eval()?

如何对数据库中存储的php代码使用eval()?,php,Php,我在数据库中有完整的HTML代码,它包括以下HTML代码- <p class="card mb-4 shadow-sm"><img src="<?php echo SITE_URL; ?>/assets/images/blog/php.png" alt="php" title="php"></p> /assets/images/blog/php.png“alt=“php”title=“php”> 这个HTML存储在db中,我希望它在获取时打印S

我在数据库中有完整的HTML代码,它包括以下HTML代码-

<p class="card mb-4 shadow-sm"><img src="<?php echo SITE_URL; ?>/assets/images/blog/php.png" alt="php" title="php"></p>

/assets/images/blog/php.png“alt=“php”title=“php”>

这个HTML存储在db中,我希望它在获取时打印SITE_URL的值,因为SITE_URL是动态的(在本例中为const)

我试着使用PHP自己的eval()函数,就像本文中提到的一样,但它不起作用

做这件事的更好方法是什么 还有别的办法吗

这里,我试过的

<p class="card mb-4 shadow-sm"><img src="<?php 
$str = SITE_URL;
eval('\$str = \'$str\';');
echo $str; ?>/assets/images/blog/php.png" alt="php" title="php"></p> 

/assets/images/blog/php.png“alt=“php”title=“php”>


假设你知道使用eval有多狡猾

只要定义了
SITE\u URL
,就可以了。然后你会做一些类似的事情:

<?php
define('SITE_URL', 'http://example.com');

$str = '<p class="card mb-4 shadow-sm"><img src="<?php echo SITE_URL; ?>/assets/images/blog/php.png" alt="php" title="php"></p>';

echo eval('?>'.$str);

“但它不起作用”的确切意思是什么?没有理由认为eval不起作用。但是,除非您需要复杂的表达式,否则更简单的placheolder/模板语法
%SITE\u URL%
和preg\u replace\u回调可能更合适。让我检查上面的给定链接。如果我正确使用它,“评估”您的HTML/PHP。但是,您还要求提供一种更好的方法:如果只是关于站点URL,那么可以在DB中保存
%%SITE\u URL%%
,然后
str\u替换
?我认为最好是存储在字符串变量中,例如%SITE\u URL%,并使用
str\u replice('%SITE\u URL%',SITE\u URL,$string)
是的,这很有效。谢谢:)
<?php
define('SITE_URL', 'http://example.com');

$vars = [
    'SITE_URL' => SITE_URL    
];

$template = '<p class="card mb-4 shadow-sm"><img src="{{ SITE_URL }}/assets/images/blog/php.png" alt="php" title="php"></p>';

// match any single word with _ or -, with spaces either side or not
// e.g: {{key}} or {{ key }} or {{key-foo}} or {{ key-foo }}
//  not {{ a b c }}
$str = preg_replace_callback("/{{[ ]{0,}([\w\_-]{1,})[ ]{0,}}}/", function ($match) use ($vars) {
    return array_key_exists($match[1], $vars) ? $vars[$match[1]] : '';
}, $template);


echo $str;