先日POST/GETからの受け取るプログラムを作ったけど、ユーザーから入力された文字列をHTMLに出力するときには、そのまま出力するとHTMLタグが使えたりとセキュリティーリスクになるので一部の文字を無害な文字列に変換しなければなりません。それが文字参照とかエスケープと呼ばれる処理です。
HTML上問題になる文字は「<」「>」「'」「"」「&」の5文字
・「<」「>」はユーザーが自由にHTMLタグが使えてしまう。
・「'」「"」は属性値の括りとして使われているので入力フォームなどが崩れる可能性がある
・「&」は危険では無いが、文字参照のキー文字になっている。なおこの文字は文字参照に変換する時は一番最初に変換し、戻す時は一番最後に変換しないとデータが壊れます。
変換対応表
元の文字→「文字実態参照」「数値文字参照10進数」「数値文字16進数」
「<」→「<」「<」「<」
「>」→「>」「>」「>」
「'」→「'」「'」「'」
「"」→「"」「"」「"」
「&」→「&」「&」「&」
3種類ありますが、htmlならどの文字を使っても表示は同じになります。人が見るなら文字実態参照が覚えやすくて良さそうですが、プログラム内部で使うだけならデータ量が少ない10進数が良いかもしれません。
Perlで文字実態に変換するとき
$str =~ s/&/&/g; $str =~ s/</</g; $str =~ s/>/>/g; $str =~ s/'/'/g; $str =~ s/"/"/g;
当たり前の事ですが、管理者がHTMLタグなどを使いたいときは、文字参照をしてはダメです。