HTMLエスケープを簡単にする独自のPHP関数
お金 | 仕事 | 勉強 | プライベート | 健康 | 心
プログラミング関連のコンテンツ
C言語/C++入門 | Ruby入門 | Python入門 | プログラミング全般
ウェブサイトのユーザー(訪問者)がフォーム入力した文字列を表示するなどの場合、HTMLエスケープの処理を行い、クロスサイトスクリプティングによる攻撃を回避しなければなりません。
HTMLエスケープを行わなければ、HTMLタグやJavaScript、VBScriptなどのコードが有効になってしまい、Cookieが盗まれたり、ページを改ざんされたり、ブラウザをクラッシュしたりなどの攻撃を受ける可能性が出てきます。
これらの攻撃のことを、クロスサイトスクリプティングと呼びます。
HTMLエスケープするべき文字は、「<」「>」「&」「”」「’」などです。
これらの文字は、HTMLやJavaScriptを書くタグとして特殊な意味を持っているからです。
それぞれ、HTMLエスケープにより、「<」「>」「&」「"」「'」という文字列に変更されます。
PHPの場合、HTMLエスケープを行うための関数として、htmlentities()、htmlspecialchars() などの関数が用意されています。
ただし、それぞれ・・・
htmlentities(文字列, クオートスタイル, エンコーディング)
htmlspecialchars(文字列, クオートスタイル, エンコーディング)
というスタイルで書く必要があり、頻繁に使う関数だけに若干面倒くさい。
例えば・・・
$escape_str = htmlentities($str, ENT_QUOTES, 'UTF-8');
という具合です。
そこで、これらのエスケープ処理を簡単に行う関数を作っておくと便利で、コードも短く書けます。
/********* w_he()関数 ********** HTMLエスケープ。文字列の配列値も渡せる @パラメータは以下の3つ $str エスケープする文字列 $strcode 文字コード。デフォルト値:UTF-8 $entq クオートスタイル。デフォルト値:ENT_QUOTES **********************************/ function w_he($str, $strcode='UTF-8', $entq=ENT_QUOTES){ if (is_array($str)) { return array_map("w_he", $str); } else { return htmlentities($str, $entq, $strcode); } }
ウェブサイトで使う文字エンコードを、引数$strcodeのデフォルト値として与えておくと楽です。
使うときは・・・
$escape_str = w_he($str);
だけの記述で済みます。
また、文字列が配列となっている場合、if条件文のis_array($str)がtrueとなりますので、それぞれの文字列の配列の要素が一つずつ、array_mapに渡されて、w_he関数が再帰的に実行されます。
よく書くコードに関しては、自分で関数定義しておくと、コーディングが若干楽になりますね。
ただ、自分定義の関数名をつけるときは、関数の名前が競合しないようにするために(将来的にも)、あまりに短い関数名は付けないほうが良いような気はしますが。
以下を参考にしてみました。
htmlspecialchars関数を簡単に扱えるようにする [Z]ZAPAブロ~グ2.0
- - 関連記事 -
- strpos() や strcmp() など間違えやすいif文での判定
- htmlentities() と htmlspecialchars() の違い
- PHPの内部エンコードと出力文字コード、スクリプト文字コード
- PHPのデバッグ・xdebugをxamppで有効にする
- CakePHPの日本語対応、国際化
- コマンドラインでPHPが起動できない
- 直接ファイルが実行されたときだけ起動するスクリプト
- ディレクトリを探索してリンク一覧表示
- PHPとRubyのコードの書き方を比較
- コメントアウトの使い分けと、/*** ~ ***/とか// — を単語登録
- PHPでvar_dump()を使ったお手軽デバッグコード
- プログラミング練習問題をPHPで解いてみた
- CakePHPはMVCかつフルスタックのフレームワーク
- PHP5のクラス定義とオブジェクトのおさらい
- フレームワークCakePHPにチャレンジ
- sort・asort・ksort 配列を並べ替える関数
- foreach構文
- PHPの配列
- strcmp関数
- strcasecmp関数