我希望有人能在这个问题上帮助我。
我正在从数据库中提取细节,以显示在一个小树枝模板上(使用Symfony2),但它保存在数据库中的方式使得很难解释HTML。
基本上,HTML标签已经被翻译成表格中的实体,例如:
<p>Bach Flower Crab Apple Remedy:&nbsp;the "cleansing" Remedy can be used both internally and externally&nbsp;</p><p><strong>
以此类推。我研究了twig中的渲染选项,并尝试了以下选项(基于我渲染产品描述的循环):
{% set strategy = 'html' %}
{% autoescape 'html' %}
{{ product.description|escape('html')|raw }}
{% endautoescape %}
和
{{ product.description|raw }}
第一个方法只是回显现有内容(作为实体),第二个方法只是将HTML标记呈现到页面,如下所示:
<p>Bach Flower Crab Apple Remedy: the "cleansing" Remedy can be used both internally and externally.</p><p><strong>...
因此,正如您所看到的,我无法找到一种方法来实际解释HTML标签,以便按照应有的方式显示描述。
有办法做到这一点吗?我不能在PHP中这样做因为它所做的只是向模板发送一个对象通过:
进行循环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开始。在最好的情况下, Twig可以输出一些HTML实体,这些实体将显示为"
…",而在"最坏的"情况下,Twig将转义文本以准确地呈现其实际情况,即"
…"。期望Twig输出实际的HTML来呈现段落是不现实的,因为这根本不是原始数据所包含的内容。
您必须首先在PHP中对该文本进行html解码,然后使用..|raw
在Twig中输出。raw
意味着Twig将按原样输出它而不进一步转义它。由于从数据库获取数据到html_entity_decode
是无稽之谈,因此您需要在这里修复数据输入 !不要 HTML对要进入数据库的数据进行编码,这没有任何意义。
我认为你必须编写自定义escaper插件来解码html实体,并像这样使用它:
{{ product.description|myawesomehtmlentitiesdecoder|raw }}
http://twig.sensiolabs.org/doc/filters/escape.html#custom-escapers参考
但是一般来说,最好将HTML存储在数据库中,然后对输出应用所需的安全过滤器。