这是存储在数据库中之前的HTML / PHP:<li><a href="<?= dots('duo/'); ?>"><?= $item->item['Manufacturer']; ?></a> <span class="divider">|</span></li>
这是存储在数据库中的HTML / PHP:
<li><a href="&lt;?= dots('duo/'); ?&gt;">&lt;?= $item-&gt;item['Manufacturer']; ?&gt;</a> <span class="divider">|</span></li>
我将此结果分配给变量:
$crumbles = $details['Crumbs'];
我如此回应结果:
<?php echo html_entity_decode($crumbles); ?>
但是当我查看源代码时会返回此信息。它没有评估字符串中的任何PHP。
<li><a href="<?= dots('duo/'); ?>"><?= $item->item['Manufacturer']; ?></a> <span class="divider">|</span></li>
它在浏览器中显示为<?= $item->item['Manufacturer']; ?> |
如何让它来评估PHP以及正确显示html?
编辑:这是处理数据库输入的代码。它序列化表单数据(url,crumbs,meta info等)并将其添加到ajax队列。
$("form#seo_add").submit(function(e) {
console.log(this);
var data = $(this).serializeArray(),
$commitBtn = $(this).find("button"),
form_incomplete = false,
queueData = ['seo_add', data];
触发后,队列控制器运行$this->seo->add($seo_add, $user);
其模型如下:
function add($data = null, $username = null) {
if (!is_array($data) || is_null($username)) die("Expecting new pageinfo");
//if a single item is being inserted, add it to a parent array so iteration works
if (!is_array($data[0]))
{
$data = array($data);
}
foreach ($data as $key => $page)
{
if (isset($page['section'])) unset($page['section']);
if (isset($page['action'])) unset($page['action']);
$add = $this->db->insert('pageinfo', $page);
$page = array_merge(array('id'=>$this->db->insert_id()), $page);
$last_queries[$key]['type'] = 'seo_add';
$last_queries[$key]['html'] = "New page: <b>" . $page['page'] . "</b>";
$last_queries[$key]['data'] = $page;
}
if ($this->db->_error_message())
$this->db_error('Unable to insert page');
return log_changes($last_queries, $username, $this->site);
}
答案 0 :(得分:1)
我建议使用占位符。
$html = '<li><a href="[href]">[item]</a> <span class="divider">|</span></li>';
我建议不要保存html编码。我猜你会这样做:
$html = str_replace(['href','item'],[dots('duo/'),$crumbles],$html);
如果用户输入的话,你可能需要编码$ crumbles或dots('duo /')。
答案 1 :(得分:1)
您的PHP标记在您的PHP标记&lt;
上进行了双重编码,因此您可以在其上运行html_entity_decode
两次。
即使您的php标签已被解码,它们也永远不会被PHP解释,因为您可以立即回复它们,解决这个问题的方法是运行数据库通过eval
返回的内容,如下所示:< / p>
$crumbles = html_entity_decode(html_entity_decode($crumbles), ENT_QUOTES);
eval("?>{$crumbles}<?");