PHPマジッククオートの被害
うっかりやられました。。
フォームでポストされた値に対しては、マジッククオートが有効になっていたらstripslashes使ってクオートを取り除くようにしていたのですが・・・。
「応募フォーム→確認画面→DB登録」
って感じに作っていたプログラムで、確認画面から再度データをPOSTさせていたので、クオートされていました。。。
そして、そのままデータベースに登録されているので、クオートされたままのデータがDBに入っていました。。。
.htaccessが使えれば、そこでマジッククオートを無効にすればいいのですが、レンタルサーバによっては.htaccessが使えないのです。。
個人的にクオートされたままDBに登録するってのも微妙なんで、DBに登録する前に、stripslashes使ってクオートを取り除きました。
書き直すファイルが結構出てきてめんどくさかったっす。。。
でもって、再帰的にマジッククオートを解除する関数作ってみました。
/**
* マジッククオートを再帰的に解除する
*/
function stripslashes_array($str){
if(!get_magic_quotes_gpc()){
return $str;
}
if(is_array($str)){
foreach($str as $key => $value){
$s_str[$key] = stripslashes_array($value);
}
return $s_str;
}else{
return stripslashes($str);
}
}
再起処理ってこんな感じでよいのでしょうか?
ちなみに、PHP6になったら、マジッククオートはなくなるそうです!PHP5.3からは非推奨だそうです。