PR

 「こうしろう,入力フォームにテーブルタグやJavaScript入れてみられ」,「うん?どうやって」,
 <TD>データ</TD>とか<SCRIPT Language="JavaScript">alert("びっくり!");</SCRIPT>と入力するんだ。
 こんな風に。

 「入れたよ」とこうしろう。そうそう,入力しただけじゃ,なにも起こらない。「テーブルの中身を表示するプログラム作ってみて」

 (しばらく時間が経過。待っていると,じきに眠たくなってしまう。春なんですなあ。)
 「あぁ,出たわ」とこうしろう。

 まず,「びっくり!」とアラートが表示された。説明にalert("びっくり!");というJavaScriptが入力されたせいだ。OKをクリックすると一覧が表示される

 何が起こっているのか? - TDタグを入力したせいで,データという文字が一マスずれているのだ。

 悪意のあるスクリプトやHTMLタグを無効化するためにサニタイズ処理が必要なのだと説明を始める。PHPでは,htmlspecialchars関数を使うと,特殊文字をHTMLエンティティに変換することができる。

 ちょっとわかりにくいが,具体的にはhtmlspecialchars関数を通すと,&は&amp;に,ダブルクォートは&quot;に,<は&lt;,>は&gt;に変換される。テーブルにデータを登録する前に,サニタイズ処理を行う場合は,$_POST配列で渡ってきた値を以下のように処理してから,テーブルに出力してやればよい。

----------------------------------------------------------

$english = htmlspecialchars($_POST['english']);
$japanese = htmlspecialchars($_POST['japanese']);
$introduce=htmlspecialchars($_POST['introduce']);

----------------------------------------------------------
 このように変換処理を記述しておけば,最初の画像と同じ内容を入力しても,

 特殊な意味のある文字を無効化して,文字列として表示させることができるのだ。