ZAPAnet総合情報局 > [Z]ZAPAブロ〜グ2.0 > プログラミングTIPS > htmlspecialchars関数を簡単に扱えるようにする

htmlspecialchars関数を簡単に扱えるようにする

2008年01月12日 プログラミングTIPS  
特殊文字を HTML エンティティに変換してくれるhtmlspecialchars関数。
PHPでは基本中の基本である関数でありながら、名前の長さやオプションの設定などが面倒で困ったものです。「htmlspecialchars」は覚えられても、オプションの「ENT_QUOTES」まで覚えるのはなかなか大変だったりします。でも、ここで手を抜くと簡単に脆弱なアプリケーションができあがってしまう危険性があります。特にユーザーからの入力には、手軽にがっちり入力保険をかけておくべきです。

そんなわけで、htmlspecialcharsを簡単に扱えるようにする方法を考えてみました。

関数名を短縮し、オプションも指定する

htmlspecialchars関数が使いにくいのは、名前が長いのとオプションの指定が面倒だからです。よって、次のように置き換えてしまえば、簡単に使えます。
function h($str){
    return htmlspecialchars($str,ENT_QUOTES);
}
「htmlspecialchars」関数を「h」という関数前で置き換え、オプションの「ENT_QUOTES」を直接指定しています。文字コードが決まっていれば、文字コードのオプションも設定した方が良いかもしれません。

利用する際は、次のように入力が短くなり、簡単に扱えるようになります。
//今まで
htmlspecialchars($str,ENT_QUOTES);

↓↓↓

//これから
h($str);

配列ごと変換できるようにする

「h($str);」で簡単に変換できるようにはなりましたが、変換対象が多い配列などでは、毎回の変換が大変です。そこで、配列でも同じ方法で変換できるように書き換えます。
function h($str){
    if(is_array($str)){
        return array_map("h",$str);
    }else{
        return htmlspecialchars($str,ENT_QUOTES);
    }
}
is_array」関数で、引数のデータが配列かどうかを調べ、配列の場合は「array_map」関数で配列全てを変換しています。


入力と出力例は、次のようになります。
//入力データ
$str1 = array("one<br>", "<b>two</b>", '"three"', "'four");
$str2 = "<br>";

print_r(h($str1));
print_r(h($str2));
//出力データ
Array
(
    [0] => one&lt;br&gt;
    [1] => &lt;b&gt;two&lt;/b&gt;
    [2] => &quot;three&quot;
    [3] => &#039;four
)
&lt;br&gt;

これで、通常の変数でも配列でも、簡単に変換できるようになりました。

スポンサード リンク

はじめてのAdobe AIRプログラミングを当ブログ管理人ZAPAが執筆しました
↑古い方です↑   ↑最新バージョンです↑
既存のWebアプリケーション技術で、クロスプラットフォームのデスクトップアプリケーションを作ることができる期待の新技術「Adobe AIR」の解説本です。

トラックバック

この記事に言及していそうなブログを検索する (無い場合は何も表示されません)

[Z]ZAPAブロ〜グ2.0最新10件