数据库中存在完整的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>
此HTML存储在db中,并且我希望它在获取时输出SITE_URL的值,因为SITE_URL是动态的(在这种情况下为const)。
我尝试使用PHP自己的eval()函数,如本article中提到的那样。但这不起作用。
什么是更好的方法? 还有其他方法可以解决这个问题吗?
在这里,我尝试过。
<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>
答案 0 :(得分:1)
假设您知道使用eval是多么狡猾。.
只要定义了SITE_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的另一种方法是使用模板,并将占位符替换为您定义的值。
<?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;
或者如果需要更多功能,可以考虑使用模板引擎。