0

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();
   }
}

問題は、投稿フォームに、ユーザーがhtmlを入力できるコンテンツテキストエリアがあることです。フォームがhtmlで送信されると<a href="#">test</a>、コンテンツはとしてデータベースに保存されます<a href=\"#\">test</a>。そして、その後の各保存で、バックスラッシュは何度も何度もエスケープします...

Symfony2フォームコンポーネントでHTMLを保存する適切な方法は何ですか?

4

2 に答える 2

1

編集のために文字列をユーザーに送信する前に、文字列から円記号を削除する必要があります。$ 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-10T14:16:40.057 に答える
0

これらのスラッシュは、mysqlエンジンがこれらの引用符をSQL構文と混同しないように配置されています。データベースからフィールドを取得するとき、ただしクライアントに投稿する前に、rejexを使用してすべてのスラッシュを削除することをお勧めします。私があなたのためのrejexを見つけることができるかどうか私に見させてください、多分誰かが私をそれに打ち負かすでしょう:)

于 2012-08-09T18:43:52.867 に答える