我希望有人能在这个问题上帮助我。
我正在从数据库中提取详细信息以显示在 Twig 模板上(使用 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 编码,它没有任何用处。
关于html - Twig 转义 HTML 并呈现为原始格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32221670/