2012-03-31 79 views
0
解碼HTML實體刪除HTML

我下面舉個例子一個什麼樣的用戶可以鍵入到字段後的名字:因爲這是一個文章標題我從文章標題,而在CakePHP中

<h1><span>They're awesome people</span></h1>

現在希望在將其保存到數據庫之前完全刪除所有HTML。這是因爲a)安全原因和b)如果我將其導出爲JSON,我不想爲第三方用戶清除HTML輸出。

我試圖在我的模型如下:

public function beforeSave() { 

     if (isset($this->data[$this->alias]['title'])) 
     { 
      //$this->data[$this->alias]['title'] = Sanitize::clean($this->data[$this->alias]['title'], array('encode'=>true,'remove_html'=>true)); 

      $this->data[$this->alias]['title'] = html_entity_decode(Sanitize::html($this->data[$this->alias]['title'], array('remove'=>true))); 
     } 
     return true; 

    } 

正如你可以看到我已經試過既乾淨又HTML從消毒類清理掉HTML,但都可以導致一個問題,即他們逃脫引自they're使其像&#039;。我曾嘗試在清潔過程中使用html_entity_decode來清理它,但仍然發生。任何想法如何做到這一點?

如果我這樣做,雖然:

echo html_entity_decode('They&#039;re awesome people'); 

它工作正常,所以功能是好的,它與同在CakePHP中的類的sanitize結合使用它的問題。

謝謝

回答

1

爲什麼不使用

Sanitize::paranoid() 

Manual

甚至strip_tags

爲了使消毒:: HTML工作

Sanitize::html($var, array('remove'=>true, 'quotes' => ENT_NOQUOTES)); 

它使用ヶ輛internaly和默認標誌設置爲ENT_QUOTES。

+0

strip_tags會訣竅!但爲什麼CakePHP版本屠殺你的HTML? – Cameron 2012-03-31 11:47:36

+0

更新的答案請檢查 – 2012-03-31 11:55:14

+0

感謝您的解釋;) – Cameron 2012-03-31 12:01:56

0

您應該嘗試htmlspecialchars_decode()函數。

編輯:

只使用PHP函數來代替CakePHP的圖書館,你可以嘗試strip_tags()

+0

好的'html_entity_decode'在PHP頁面中正常工作時工作正常,但在包裝清理時不起作用,所以函數很好,只是在清理前的beforeSave中使用它時不行。 **這不起作用或者只是嘗試了。** – Cameron 2012-03-31 11:14:21

+0

現在我使用CakePHP進行了測試,您說得對。那麼,不是CakePHP解決方案,但是你可以只使用PHP函數嗎?您可以使用[strip_tags()](http://php.net/strip_tags)刪除HTML。 – 2012-03-31 11:33:19

相關問題