遊星ゲームズ
FrontPage | RSS


HTML特殊文字エスケープのやりかた
 日記 プログラム

 DB登録時にHTML特殊文字をエスケープして登録してるPHPシステム。コレ久しぶりに喰らった。すげー困る。

 というわけで改めて、正しいやり方を書く。

  • HTML特殊文字は表示の直前にhtmlspecialchars!
  • htmlspecialcharsには第2引数でENT_QUOTESをつけろ!
    (シングルクォートもエスケープ)
  • 変数を表示するときは、基本全部htmlspecialchars!

「表示の直前」である。htmlspecialcharsをしたら、その後はいっさいの加工をしてはいけない。「あたりまえじゃん」と思った人はずっと忘れないで。また、エスケープするタイミングはできるだけ一致させないと、あとでわけわからなくなる。「直前」が一番わかりやすい。
 ENT_QUOTESについては異論もあるらしい。けどまあこういうのは、「正しいか正しくないか」じゃなくて「できるかできないか」なのだ。ひとりで作ってるなら個別に正しい判断も可能だが、システムは不特定多数が触る。だから、わかりやすく全部つけときゃいい。
 そして、基本は「全部」だ。定数だろうとなんだろうと全部。どれをやってどれをやらないか、判断できる人もいるだろうが、不特定多数の全員ではない。わかりやすく全部、できるだけ同じ方法でエスケープ。

 それで支障があるのなら、設計が悪い。いまなおさないと、いつか問題が起こる。

 ……なんか、書いててレベル低い話だなあと思うけど。でもPHPってそういう世界だからさ……。
 PHPに関してはいつも思うが、間違ったこと書いてるサイトがあまりに多いという問題もある。これに関してはGoogleの罪かも。


HTML特殊文字エスケープのやりかたを