とにかく、あなたがしていることは安全ではありません。自分が何をしているのかを本当に理解する必要があります。
mysql_real_escape_string():この関数は文字列を受け取ってエスケープし、SQL ステートメント内で使用できるようにします。これが行うことは、何がデータで何がクエリかをクエリ パーサーに明確にすることだけです。これを理解することが重要です。
htmlentities()/htmlspecialchars(): これらの関数は文字列をエスケープして、HTML パーサーが<
やなどの文字を HTML であると認識することなく、HTML 内で使用できるようにし"
ます。これらのエンティティは と に<
なり"
ます。
これらの関数は、正しいコンテキストで使用する必要があります。クエリコンテキストで使用される前に文字列に触れる最後のものとして使用しないことで、その値のほとんどを無効にします。mysql_real_escape_string()
この関数は、データベースにデータを挿入する場合、および文字列が完全に形成されている場合にのみ使用してください。最善の方法は、クエリ内でデータをまったく使用しないことです。代わりに、準備済み/パラメーター化されたクエリで PDO を使用してください。これにより、クエリからデータが効果的に削除され、SQL インジェクションの可能性がなくなります。
HTML に任意の文字列を挿入する準備ができるまで、使用しないでください。htmlentities()
つまり、データベースにデータを入れる前にこの関数を使用しないでください。そうしないと、他のコンテキストでデータを操作するのが非常に難しくなります。これを行うために人々が作る混乱に対処するのは本当に面倒です。やらないでください。
ここで、リテラル\r
または\n
テキストで表示されている場合、そのデータは別のものから来ています。使用している2つの機能からではありません。これらの関数はいずれも、そのような文字列を挿入しません。
参照: https://stackoverflow.com/a/7810880/362536