マジッククオートを無効にする独自のPHP関数

はてなブックマークに追加はてなブックマーク Yahoo!ブックマークに登録 ニフティクリップに追加 Livedoor クリップに追加 BuzzurlにブックマークBuzzurlにブックマーク Twitterに投稿  

PHPには、マジッククオートと呼ばれる無駄な機能があります。
PHPのmagic_quotes_gpcがオンになっていると、マジッククオートが有効になってしまい、フォームから渡されたデータに対し、内部的にaddslashes()関数が実行されます。

この結果、たとえば単一引用符「'」は、「\'」と、バックスラッシュがついて自動的にエスケープされます。
サブミット済みのフォーム入力データを、HTML上に出力した場合などは、余計な「\」(バックスラッシュ)がついて、とても不便です。

マジッククオートがオンの場合、stripslashes()関数を使いアンエスケープした後、htmlentities()やhtmlspecialchars()でHTMLエスケープすると、HTML上への出力が上手く行きます。
以下は、頻繁に使うstripslashes()関数のコードを、簡単にする独自の関数定義です。

/********* w_gmss()関数 **********
マジッククオートが有効な場合は、
stripslashesでアンエスケープ。
@パラメータは以下の1つ
$str        文字列
**********************************/
function w_gmss($str) {
    if (get_magic_quotes_gpc()) {
        if (is_array($str)) {
            return array_map("w_gmss", $str);
        } else {
            return stripslashes($str);
        }
    } else {
        return $str;
    }
}

フォームから渡されたデータを、HTML上に出力する場合は、以前定義したHTMLエスケープを簡単にするPHP関数とともに使って・・・

$escape_str = w_he(w_gmss($str));

とすれば、マジッククオートをオフにした後、HTMLエスケープすることができます。


日時: 2008年02月13日 23:45
コメントを投稿






トラックバック

■この記事のトラックバックURL:
http://www.mapee.jp/mpe334/mt-tb.cgi/104

この記事にトラックバックされる方は、参照先が分かるようにするために、「マジッククオートを無効にする独自のPHP関数」へのリンクをお願いいたします。
以下のHTMLタグをトラックバック送信元ページ内に挿入して下さい。



※この記事へのリンクがない、また関連のないページからのトラックバックは反映されませんので、ご了承下さい。






あわせて読みたいブログパーツ
フィードメーター - ウェブライフハック