DB登録時にHTML特殊文字をエスケープして登録してるPHPシステム。コレ久しぶりに喰らった。すげー困る。
というわけで改めて、正しいやり方を書く。
「表示の直前」である。htmlspecialcharsをしたら、その後はいっさいの加工をしてはいけない。「あたりまえじゃん」と思った人はずっと忘れないで。また、エスケープするタイミングはできるだけ一致させないと、あとでわけわからなくなる。「直前」が一番わかりやすい。
ENT_QUOTESについては異論もあるらしい。けどまあこういうのは、「正しいか正しくないか」じゃなくて「できるかできないか」なのだ。ひとりで作ってるなら個別に正しい判断も可能だが、システムは不特定多数が触る。だから、わかりやすく全部つけときゃいい。
そして、基本は「全部」だ。定数だろうとなんだろうと全部。どれをやってどれをやらないか、判断できる人もいるだろうが、不特定多数の全員ではない。わかりやすく全部、できるだけ同じ方法でエスケープ。
それで支障があるのなら、設計が悪い。いまなおさないと、いつか問題が起こる。
……なんか、書いててレベル低い話だなあと思うけど。でもPHPってそういう世界だからさ……。
PHPに関してはいつも思うが、間違ったこと書いてるサイトがあまりに多いという問題もある。これに関してはGoogleの罪かも。