2012-04-16 98 views
0

我是用這個來我的數據保存到數據庫中:消毒:: HTML有口音CakePHP2.0

$this->request->data['Post']['body'] = utf8_decode($this->request->data['Post']['body']); 

那樣,我可以保存到我的數據庫就像口音的人一些「特殊」字符: áéíóú沒有任何問題。

然後,我試圖保護我的應用程序從HTML和SQL注入和我使用的消毒是這樣的:

$this->request->data['Post']['body'] = Sanitize::html($this->request->data['Post']['body']); 

所以,現在我的文字被存儲在數據庫中是這樣的:

á = á 
é = é 
í = í ...etc 

我不想那樣。另外,我在DB上的字段有最多的字符,這沒有幫助。

我也嘗試使用options = true,encode = false或encode ='utf8'進行清理的選項參數,但似乎沒有任何改變。

我該怎麼辦? 謝謝。

更新1

我也曾嘗試使用ヶ輛功能我的控制器上,但它在我的數據庫中插入該替代的:

à 

回答

2

如果你使用的蛋糕保存數據(即使用save()而不是query()),那麼您將受到SQL注入的保護。它自動轉義值。

正如文檔中所述,Sanitize::html()會將字符轉換爲HTML實體,例如>,á等。除非特別需要HTML實體,否則您可能不應該使用它。如果您的應用程序和表格有適當的編碼,Cake會照顧將重音存儲在數據庫中。

+0

好的,那麼我應該在我的視圖中使用h($ myText)來保護它免受HTML注入嗎? – Alvaro 2012-04-16 16:48:52

+0

好的,我可以在我的視圖上對待它,因爲我的身體containts在HTML格式(aaa)上創建了URL,並將其銷燬。 我也嘗試過在我的控制器上使用htmlentities,但它可以節省我這個數據庫:Ã而不是á – Alvaro 2012-04-16 16:55:38

+0

如果你不想存儲HTML,你可以'sanitize :: stripTags()'。 'h()'不會幫助你。它只是將字符轉換爲實體,就像'Sanitize :: html()'所做的那樣。 – jeremyharris 2012-04-16 16:56:44