一般的な経験則は次のとおりです。
変数をデータのクリーンな表現にする必要があります。つまり、「オブライエン」という名前の人の名前を保存しようとしている場合は、絶対にしないでください。 これらが欲しい:
O'Brien
O\'Brien
..なぜなら、それは彼の名前ではないからです。アンパサンドやスラッシュは含まれていません。その変数を取得して特定のコンテキストで出力する場合(たとえば、SQLクエリに挿入する、またはHTMLページに出力する)、 変更するときです。
$name = "O'Brien";
$sql = "SELECT * FROM people "
. "WHERE lastname = '" . mysql_real_escape_string($name) . "'";
$html = "<div>Last Name: " . htmlentities($name, ENT_QUOTES) . "</div>";
htmlentities
は必要ありません -データベースに保存されているエンコードされた文字列。 CSVやPDF、またはではないものを生成したい場合はどうなりますか HTML?
データをクリーンに保ち、その瞬間の特定のコンテキストでのみエスケープします。