他の人が指摘しているように、#2が正解です。必要になるまで「生」のままにして、適切に脱出してください。
理由を詳しく説明するために(そして他の投稿を繰り返し/要約します)、シナリオ1を論理的に極端なものにしましょう。
誰かが「' OR 1=1 <other SQL injection> --
を入力するとどうなりますか "。SQLを使用しているため、SQL用にエンコードする必要があると判断した可能性があります(パラメーター化されたステートメントを使用しなかったためかもしれません)。したがって、SQLとHTMLのエンコードを混合(または決定)する必要があります。
突然、上司がXML出力も必要だと判断しました。パターンの一貫性を保つために、そのためにもエンコードする必要があります。
次のCSV-ああ、いや!テキストに引用符とコンマがある場合はどうなりますか?もっと逃げる!
ねえ-素敵なインタラクティブなAJAXインターフェースはどうですか?ここで、おそらくJSONをブラウザーに送り返したいと思うので、{、[などすべてを考慮する必要があります。ヘルプ!!
したがって、明確に、データを指定どおりに保存し(もちろん、ドメインの制約に従います)、必要なときに出力に適切にエンコードします。 。 出力はデータと同じではありません。
この答えがあまりひいきになっていないことを願っています。他の回答者へのクレジット。