我有一个用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标签并让它们渲染。我试图清除缓存,结果相同:(
答案 0 :(得分:3)
我不知道为什么您的数据库中包含<p>Lorem ipsum</p>
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解码它。