関数 wp_magic_quotes()
2014/11/22
WordPress のマジッククオート
定義ファイル :/blog/wp-includes/load.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | 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 ); } |
WordPress によって強制的に外部入力は無条件に magic quotes される。
PHP設定は無関係。
プレーンな値を直接取得する方法は無いようです。
プレーンな入力値が必要な時は、stripslashes() を使うようです。
stripslashes — クォートされた文字列のクォート部分を取り除く
stripslashes()
外部リンク
WordPress でプラグインを書こうとしたら、$_POST とか $_GET とか使うことになると思います。
ところが、これらの外部入力は無条件に magic quotes されています。
しかも、WordPress によって。PHP 関係なしで。また、プレーンな値を直接取得する方法も無いようです。
で、プレーンな入力値が必要な時は、stripslashes です。ちょっとびっくりしましたが、これも WordPress の流儀。
WordPress 始めたばっかりのプログラマ側の人はびっくりするかも知れないと思ってのメモでした。
詳細最初、まさか php がマジッククオート ON なのか? と思ったりして php.ini とか見たり、.htaccess 見たりしてけれど、magic qoutes なんてされてません。もちろん、get_magic_quotes_gpc() で確認しても、大丈夫、ちゃんとオフ。
なぜー? なんでー?! (?_?)
まさかと思いつつ、WordPress のコードを彷徨ったら、load.php の中に次の関数を見つけました。
1234567891011121314151617 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 );}これは WordPress の流儀のようです。
では、プレーンな値が欲しい時はどうするのか?
これが調べてもそれらしい情報が出てこなかったのですが、Twitter で @horike37 さんがビシッと教えてくれました。自動でシングルコートつけてきよるのでstripslashesするしかない!
とのこと。
潔いですね。というか、html escape がデフォルトのテンプレートエンジンと同じじゃないか、合理的じゃないか、ということで、納得しておきます!