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エスケープすることができます。
■この記事のトラックバックURL:
http://www.mapee.jp/mpe334/mt-tb.cgi/104