PHP には、クライアント、データベース チュートリアル、URL などの一般的な出力ターゲットをエスケープするために使用できる組み込み関数があります。
独自のアルゴリズムを作成する場合は、確実であることが重要です。外部システム内の特殊文字の信頼できる完全なリストと、データが変換されずに保存されるようにそれらがどのように表現されるかを見つける必要があります。
最も一般的な出力先はクライアントであり、送信する前に htmlentities() を使用してデータをエスケープするのが最良の方法です。他の文字列関数と同様に、その入力は文字列であり、処理されて出力されます。ただし、 htmlentities() 関数を使用する最良の方法は、2 つのオプションのパラメーター、つまり引用符をエスケープする方法 (2 番目のパラメーター) と文字セット (3 番目のパラメーター) を指定することです。引用符のエスケープ方法は ENT_QUOTES として指定する必要があります。その目的は、単一引用符と二重引用符を同時にエスケープすることです。これは、文字セット パラメータがページで使用される文字セットと一致する必要があります。
データがエスケープされているかどうかを区別するために、やはり名前付けメカニズムを定義することをお勧めします。クライアントに出力されるエスケープされたデータの場合、$html 配列を保存に使用します。この配列は最初に空の配列に初期化され、フィルター処理されエスケープされたすべてのデータが保存されます。
$html = 配列( );
$html['ユーザー名'] = htmlentities($clean['ユーザー名'], ENT_QUOTES, 'UTF-8');
echo "おかえりなさい、{$html['username']}。
";
?>
ヒント
htmlspecialchars() 関数は基本的に htmlentities() 関数と同じですが、パラメータ定義は htmlentities() のエスケープがより徹底されている点が異なります。 $html['username'] 経由でユーザー名をクライアントに出力することで、その中の特殊文字が表示されないようにすることができます
この楽器は誤解されていました。ユーザー名に文字と数字のみが含まれている場合、実際にはエスケープは必要ありませんが、これは多層防御の原則を反映しています。出力をエスケープすることは非常に良い習慣であり、ソフトウェアのセキュリティを大幅に向上させることができます。
もう 1 つの一般的な出力先はデータベースです。可能であれば、PHP の組み込み関数を使用して SQL ステートメント内のデータをエスケープする必要があります。 MySQL ユーザーにとって、最適なエスケープ関数は mysqltutorial_real_escape_string() です。使用しているデータベースに PHP の組み込みエスケープ関数がない場合は、addslashes() が最後の手段です。
次の例は、MySQL データベースの正しいエスケープ手法を示しています:
$mysql = array( );
$mysql['ユーザー名'] = mysql_real_escape_string($clean['ユーザー名']);
$sql = "SELECT *
プロフィールから
WHERE ユーザー名 = '{$mysql['ユーザー名']}'";
$result = mysql_query($sql);
?>