2012-08-08 71 views
0

我試圖用Symfony2表單系統保存HTML內容,但是我面臨轉義問題。使用Symfony-2.0表單組件保存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。當表單以<a href="#">test</a>之類的html提交時,內容將被保存到數據庫中,其格式爲<a href=\"#\">test</a>。然後在隨後的每次保存反斜槓逃生自己一次又一次...

什麼是適當的方式來存儲與Symfony2表單組件的HTML?

回答

1

你應該從字符串中刪除反斜槓,然後發送給用戶進行編輯。您應該能夠從$ post對象獲取內容,然後剝離它的斜槓並將其設置回像這樣的帖子內容。

$post = new Post(); 
$post->setContent(stripslashes($post->getContent())); 
$postForm = $this->createForm(new PostFormType(), $post); 

現在,當形式使得它不會有轉義字符。

但是,我發現如果你返回一個響應到同一頁面,你仍然會看到反斜槓。爲了避免這種情況,你可以回到這樣

if($postForm->isValid()){ 
    $em->flush(); 
    return new RedirectResponse('route', array('postId' => $postId))); 
} 
0

這些斜線放在那裏,以便mysql引擎不會將這些引號與sql語法混淆。當您從數據庫中檢索字段時,但在將其發佈到客戶端之前,我建議您使用rejex來擺脫所有斜線。讓我看看我是否能找到你的rejex,也許有人會打我:)

+0

一個RedirectResponse比rejex甚至更好,嘗試使用PHP的修剪命令---字符串修剪(字符串$海峽[,字符串$ charlist])只是使第二個參數是: 「\\」,像這樣:trim($ html,「\\」); – Furyvore 2012-08-09 18:45:14