2012-04-16 9 views
0

アクセント:そのようなサニタイズ:: HTML私はデータベースに自分のデータを保存するためにこれを使用していたCakePHP2.0

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

を、私は私のDBにアクセントを持つもののようないくつかの「特別な」文字を救うことができます: áéíúú問題なし。

はその後、私は、HTMLとSQLインジェクションから自分のアプリケーションを保護しようとしましたが、私はこのようなサニタイズを使用:

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

だから今、私のテキストは、このようなデータベースに格納されます。

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

そして私はそれを望んでいない。また、DB上の私のフィールドは最大の文字を持っており、これは役に立ちません。

私はまた、encode = true、encode = falseまたはencode = 'utf8'でsanitizeでオプションparamを使用しようとしましたが、何も変更されないようです。

どうすればよいですか?おかげさまで

UPDATE 1

は、私も自分のコントローラの機能をにhtmlentities使用しようとしましたが、それは代わりに、áの私のデータベースでこれを挿入します。

à 

答えて

2

、あなたのデータを保存するためにケーキを使用している場合(つまりsave()ではなくquery()を使用すると、SQLインジェクションから保護されます。値を自動的にエスケープします。

Sanitize::html()は、>,áなどの文字をHTMLエンティティに変換します。特にHTMLエンティティが必要な場合を除き、使用しないでください。ケーキはあなたのアプリケーションやテーブルに適切なエンコーディングを持っているならば、データベースにあなたのアクセントを保存するのをうまくやってくれます。

+0

[OK]をクリックしてh($ myText)をHTMLインジェクションから保護するビューを使用する必要がありますか? – Alvaro

+0

私の体はHTML形式(aaa)のURLを作成し、それを破壊するので、私は私のビューでそれを扱うことができます。 コントローラでhtmlentitiesを使用しようとしましたが、これはデータベースに保存されます:Ã – Alvaro

+0

の代わりに、HTMLを保存したくない場合は 'Sanitize :: stripTags()'だけで済むでしょう。 'h()'はあなたを助けません。 'Sanitize :: html()'のように文字をエンティティに変換するだけです。 – jeremyharris

関連する問題