Sanitizeの中身
Sanitizeのソースを読んで気付いた、マニュアルには載ってない、あるいは分かりずらいポイントなど*1。
引用ソースは全てcake/libs/sanitize.php
clean()がデフォルトで処理してるもの
端的に言うと、clean()をかけると、
- よからぬ文字を安全化して
- html()とescape()をかけます。
具体的内容
- 0xCAなどの、よくないスペースを安全化
- Sanitize::html()
- 具体的には &, %, <, >, ", ', (, ), +, -
- 処理したくない場合の$options['encode']=false。変数名はhtmlentitiy とかにして欲しいような・・・
if ($options['encode']) { $data = Sanitize::html($data); }
- バックスラッシュ付きの$(\\\$)を$に
- キャリッジリターン(\r)削除
- html()の処理で&が変換されてしまった10進数のユニコードを元に戻す
if ($options['unicode']) { $data = preg_replace("/&#([0-9]+);/s", "&#\\1;", $data); }
http://php.tonnikala.org/manual/ja/function.mysql-real-escape-string.php
-
- $options['encode']と$options['connection']が関連。
if ($options['escape']) { $data = Sanitize::escape($data, $options['connection']); }
- 不正なバックスラッシュを安全化
マニュアルに載ってないけど実はこんな処理もできる
stripWhitespace($str)
改行とタブを削除して、連続する半角スペースを1個のみにする
stripImages($str)
imgタグ削除
stripScripts($str)
scriptタグとstyleタグ削除
stripAll($str)
stripWhitespace(), stripScripts(), stripScripts()を全て処理する
stripTags($str, $tag1, $tag2・・・・)
第二引数以降に指定したタグを削除
*1:ver.1.2.5