validation
クライアントととのデータ受渡しの際に行う必要があるバリデーションについての自分メモ。
一般的なvalidation関数
htmlspecialchars
htmlspecialchars
@param string 処理対象文字列
@param int 処理オプション(default ENT_COMPAT)
@param string 変換文字セット(default true)
@param bool 気にしない
@retval string
&, ', ", <, > をHTMLエンティティに変換する事が出来る
第2引数
- ENT_CMOPAT(2) :シングルクウォートを変換しない
- ENT_QUOTES(3) :全て変換する
- ENT_NOQUOTES(0) :シングルクウォート、ダブルクウォートを変換しない
※ PHPのコアな定義済み定数で、()の中は実体値
=> get_defined_constant で定義済み定数を取得可能。
基本的には ENT_QUOTES を使う。
第3引数
不正な文字エンコーディングを利用した攻撃を防ぐためにも指定した方が良い。
htmlspecialchars ( $str, ENT_QUOTES, 'UTF-8' );
もしくは
htmlspecialchars ( $str, ENT_QUOTES, mb_internal_encording() );
■ htmlspecialchars 変換表
変換前 | htmlspecialchars ($str) | htmlspecialchars ($str, ENT_QUOTES) |
---|---|---|
& | & | & |
< | < | |
> | > | > |
" | " | " |
' | ' | ' |
htmlentities
htmlentities
@param string 処理対象文字列
@param int 処理オプション(default ENT_COMPAT)
@param string 変換文字セット(default true)
@param bool 気にしない
@retval string
htmlspecialchars よりも詳細にHTMLエンティティ化を行う。
htmlspecialchars が5つ程度の変換なのに対して、htmlentities は100個の文字を変換する
※ get_html_translation_table で変換テーブルを取得可能
=> 逆変換は html_entity_decode
addslashes
addslashes
@param string 処理対象文字列
@retval string
バックスラッシュ(¥), NULL(¥x00), ', " をエスケープ処理する。
mysql_real_escape_string
mysql_real_escape_string
@param string 処理対象文字列
@param resource DBリンク
@retval string
MySQLにデータを投入する場合は基本的にこれを通した方が良い
¥00, ¥n, ¥r, ¥, ', ", ¥x1a(EOF) をエスケープ処理する。
■ addslashes, mysql_real_escape_string 変換表
変換前 | addslashes | mysql_real_escape_string |
---|---|---|
¥x00 | ¥0 | ¥0 |
¥ | ||
' | ¥' | ¥' |
" | ¥" | ¥" |
¥n | ¥n | |
¥r | ¥r | |
¥x1a | ¥Z |
validation の一般関数化
function v ($str) { if (is_array($str)) { return array_map("v", $str); } else { return htmlspecialchars($str, ENT_QUOTES); } }