我希望有人可以在这个问题上帮助我。
我从数据库中提取细节以显示在树枝模板上(使用Symfony2),但它在数据库中的保存方式使得难以解释HTML。
基本上,HTML标签已经被翻译为表格中的实体,例如:
{% set strategy = 'html' %}
{% autoescape 'html' %}
{{ product.description|escape('html')|raw }}
{% endautoescape %}
等等。我已经研究了twig中的渲染选项,并尝试了以下内容(基于我渲染产品描述的循环):
{{ product.description|raw }}
并且还只是:
<p>Bach Flower Crab Apple Remedy: the "cleansing" Remedy can be used both internally and externally.</p><p><strong>...
第一种方法只是回显现有内容(作为实体),第二种方法只是将HTML标记呈现给页面,如下所示:
public function showAction(Request $request, $store_id=0)
{
$max = 1000;
$repository = $this->getDoctrine()->getRepository('AppBundle:Product');
$products = $repository->getProductsByStoreId($store_id,$max);
$paginator = $this->get('knp_paginator');
$pagination = $paginator->paginate(
$products,
$request->query->get('page', 1),
20
);
$return['products'] = $pagination;
$return['categories'] = $this->getCategories();
return $this->render('AppBundle:tables:productstable.html.twig', $return);
}
因此,正如您所看到的,我无法找到实际解释HTML标记的方法,以便按原样显示描述。
有办法做到这一点吗?我不能在PHP中这样做,因为它正在做的是将一个对象发送到循环的模板:
local spriteList = {}
local function spawnRedThing(dt)
local sprite = cc.Sprite:create("land.png")
table.insert(spriteList,sprite)
end
local function touchBegan(touch,event)
for index,obj in pairs(spriteList) do
if cc.rectContainsPoint(obj:getBoundingBox(),touch:getLocation()) then
--sprite touched
end
end
return true
end
答案 0 :(得分:2)
您的核心问题是您的数据库中没有HTML。 充其量 Twig可以输出一些 HTML实体,它们会明显呈现为“&lt; p&gt; ...”,而在“最差”的Twig会将文本转义为实际上准确地渲染它,这是“&amp; lt; p&amp; gt; ...”。期望Twig输出将呈现段落的实际HTML是不现实的,因为这不是原始数据所包含的内容。
您必须先在PHP中对该文本进行HTML解码,然后使用 <reference name="head">
<action method="setRobots"><value>NOINDEX,NOFOLLOW</value></action>
</reference>
在Twig中输出。 ..|raw
表示Twig将按原样输出,而不会进一步转义它。由于将数据从数据库中获取到html_entity_decode
是无意义的,因此您需要在此处修复数据输入! 不要 HTML编码进入数据库的数据,它没有用处。