我试图用Symfony2表单系统保存HTML内容,但遇到了转义问题。
我的addPost操作如下所示
$em = $this->getDoctrine()->getEntityManager();
$post = new Post();
$postForm = $this->createForm(new PostFormType(), $post);
if ($request->getMethod() == 'POST') {
$postForm->bindRequest($request);
if($postForm->isValid()){
$em->persist($post);
$em->flush();
}
}问题是post表单有一个允许用户输入html的内容文本区域。当表单以<a href="#">test</a>等超文本标记语言提交时,内容将以<a href=\"#\">test</a>格式保存到数据库中。然后在随后的每一次保存中,反斜杠一次又一次地转义...
用Symfony2表单组件存储超文本标记语言的正确方法是什么?
发布于 2012-08-10 22:16:40
在将字符串发送给用户进行编辑之前,应删除字符串中的反斜杠。您应该能够从$post对象获取内容,然后去掉它的斜杠并将其设置回post内容,如下所示。
$post = new Post();
$post->setContent(stripslashes($post->getContent()));
$postForm = $this->createForm(new PostFormType(), $post);现在,当表单呈现时,它将不会有转义字符。
然而,我发现如果你返回同一页的响应,你仍然会看到反斜杠。要避免这种情况,您可以返回如下所示的RedirectResponse
if($postForm->isValid()){
$em->flush();
return new RedirectResponse('route', array('postId' => $postId)));
}发布于 2012-08-10 02:43:53
这些斜杠放在那里,以便mysql引擎不会将这些引号与sql语法混淆。我建议您在从数据库检索字段时,但在将其发布到客户端之前,使用rejex去掉所有斜杠。让我看看如果我能为你找到rejex,也许有人会先我一步:)
https://stackoverflow.com/questions/11867895
复制相似问题