MW211 EXIT

devlog
PHP/特殊文字の変遷
2012年04月21日
今さらながら…、サニタイズして表示した特殊文字って、POSTした場合どうなるの?

「'」は「'」にエスケープされる訳だが、以下のように設定してPOSTしてみた。
┌──────────────────────────────────────┐
│<input type="hidden" name="test" value="&#039;"/>                           │
└──────────────────────────────────────┘
結果は以下の通り、「'」に戻ってる。
┌──────────────────────────────────────┐
│echo $_POST['test'];  →「'」                                               │
└──────────────────────────────────────┘
だから、「'」とか表示させたものをそのまま再入力することができるんですね。

DBから読み出して、画面表示して、POSTして、またDBに戻した場合
例えば「'」は、以下のような変遷を経ることになる。
┌──────────────────────────────────────┐
│┌──┐                                                                    │
││┌───┐                                                                │
│││  '   │…DB上の元の値                            …(1)                 │
││└─┬─┘                                                                │
││    ↓                                                                    │
││┌───┐                                                                │
│││  '   │…PHP変数として取得される値               …(2)                 │
││└─┬─┘                                                                │
││    ↓                                                                    │
││┌───┐                                                                │
│││&#039;│…画面表示のためにサニタイズされた値      …(3)                 │
││└─┬─┘                                                                │
││    ↓                                                                    │
││┌───┐                                                                │
│││  '   │…POSTされた値(PHP変数として取得される値) …(4)                 │
││└─┬─┘                                                                │
││    ↓                                                                    │
││┌───┐                                                                │
│││  \'  │…SQLインジェクション対策で変換された値   …(5)                 │
││└─┬─┘                                                                │
││    ↓                                                                    │
││┌───┐                                                                │
│││  '   │…再度DB上に格納された値                  …(6)                 │
││└───┘                                                                │
│└──┘                                                                    │
└──────────────────────────────────────┘

【おまけ】
ちなみに、「TRUE」の場合、(1)(2)は「TRUE」、(3)(4)(5)で「1」、(6)で「TRUE」、
「FALSE」の場合、(1)(2)は「FALSE」、(3)(4)で「」、(5)(6)で「FALSE」
ってところか。

「if ($_POST['test'])」ってした場合、「1」で真、「」で偽になるしね。

でも大抵は、チェックボックスとか別の形式になるんだけど。
分類:PHP