Twig不会渲染html标签,原始的不起作用

时间:2016-08-16 16:06:05

标签: php html twig symfony

我有一个用Symfony3编写的简单博客应用程序,我使用TinyMCE作为我的文本编辑器。 我将数据存储在数据库中,其中示例记录如下所示:

<p>Lorem ipsum</p>

我使用此方法从DB获取文章:

  /**
  * @Template
  */

  public function adminAction()
  {
  $repository = $this->getDoctrine()->getRepository('BlogBundle:Post');

  $lastPosts = $repository->findBy(
  array(),
  array('id' => 'DESC'), 4
  );

  return array(
    'last_posts' => $lastPosts,
  );
  }

并像这样处理返回的值(它只是代码的一部分):

<div class="panel-body">
  {{post.text|raw}}
</div>

输出如下:

<p>Lorem ipsum</p>

我应该怎样做才能摆脱html标签并让它们渲染。我试图清除缓存,结果相同:(

3 个答案:

答案 0 :(得分:3)

我不知道为什么您的数据库中包含&lt;p&gt;Lorem ipsum&lt;/p&gt; HTML内容,因为它不是HTML,而是转义HTML 。使用raw取消内容,因此您的转义HTML变为......等待它...... HTML。由于twig会自动转义HTML,这就是为什么标签会显示在您的页面上的原因。

您可以尝试快速修复{{post.text|raw|raw}}以取消未转义的HTML。但老实说,我建议您的应用程序的完整性是直接在您的数据库中取消HTML。您应该在数据库中有<p>Lorem ipsum</p>,然后使用{{post.text|raw}}应该可以正常工作。

答案 1 :(得分:1)

好的,问题在于我的tinyMCE编辑器的配置,我用过

<script>
  tinymce.init({
   ...
   entity_encoding: "raw"
  });
 </script>

所以现在我的数据库存储HTML标记而不是转义的HTML。感谢@Terenoth的解释

答案 2 :(得分:0)

你需要取消输出。如果你不能在你的php中做htmlspecialchars_decode,你可以尝试用twig extension解码它。