フォームのPOST送信時に、グローバル変数$_POSTに入っているデータのうち、シングルクォーテーション等にバックスラッシュが入ってしまう現象が発生。
phpに関する情報を探っているとphp.iniのmagic_quotes_gpcがonになっていると勝手に付加される模様。
POSTデータを処理する際にget_magic_quotes_gpcでonかoffかを調べて、offの時に addslashes で付加する処理を作成
$str=$_POST["data"]; if (get_magic_quotes_gpc()) { $ret = $str; } else { $ret= addslashes($str); } }
しかし、失敗に終わる。get_magic_quotes_gpc が0(ゼロ)にもかかわらず。
さらに調べると、どうやらwordpressの方が勝手に addslashes を行っているようだ。
/wordpress/wp-settings.php にて wp_magic_quotes() という関数を呼んでいて、その中の処理で get_magic_quotes_gpc が on の場合は削除してから付加するといった事をしていた。
/wordpress\wp-includes/load.phpにて function wp_magic_quotes() { // If already slashed, strip. if ( get_magic_quotes_gpc() ) { $_GET = stripslashes_deep( $_GET ); $_POST = stripslashes_deep( $_POST ); $_COOKIE = stripslashes_deep( $_COOKIE ); } // Escape with wpdb. $_GET = add_magic_quotes( $_GET ); $_POST = add_magic_quotes( $_POST ); $_COOKIE = add_magic_quotes( $_COOKIE ); $_SERVER = add_magic_quotes( $_SERVER ); // Force REQUEST to be GET + POST. $_REQUEST = array_merge( $_GET, $_POST ); }
んー、じゃあwpを使っている限りはバックスラッシュが必ず付いている前提でいいってことかな?