HTMLを文字列として表示する

この記事は2007年05月17日に書かれた物です

解説

例えば文字列中にHTMLが含まれる場合、それをHTMLではなくタダの文字として表示したい場合がある。このような時にはHTMLの仕様で定められている文字実体参照などへ変換してやれば良い。

原理は非常にシンプルだ。単純に以下の文字列に置き換えてやれば良い。

変換前 変換後
& &
< &lt;
> &gt;
" &quot;
' &#39;

これを行うことで、タグ使用不可の掲示板が作成できたり、XSS対策(クロスサイトスクリプティング)にも活用できる。

サンプル

;#
;#HTML(タグ)を表示する、XSS対策を行いたい
;#
 
#-------------------------------------------------#
#HTML準備
#-------------------------------------------------#
my $html = qq|<script language="JavaScript">alert('にょろ');</script>\n|;
 
#-------------------------------------------------#
#変換+表示
#-------------------------------------------------#
#-- オリジナル関数 --#
print xss($html);
 
#-- CGIモジュールを利用 --#
use CGI qw(:cgi);
print CGI::escapeHTML($html);
 
#-------------------------------------------------#
#XSS対策
#-------------------------------------------------#
sub xss {
	my $str = shift || return(undef);
 
	$str =~ s/&/&amp;/g;
	$str =~ s/</&lt;/g;
	$str =~ s/>/&gt;/g;
	$str =~ s/\"/&quot;/g;
	$str =~ s/\'/&#39;/g;
 
	return($str);
}

実行結果

&lt;script language=&quot;JavaScript&quot;&gt;alert(&#39;にょろ&#39;);&lt;/script&gt;

ここではオリジナルの関数とCGIモジュールの機能の両方を試してみたが、場合によって好きな方を使えば良い。結果はどちらも同じだ。

関連書籍

failed to fetch data: unkown error

竹下 隆史, 村山 公保, 荒井 透, 苅田 幸雄
ISBN 4274068765
¥ 2,376

コメント

コメントを入力. Wiki文法が有効です:
H C E W O