この質問はさまざまな場所で何度か出されましたが、明確で明確な答えは見つかりませんでした。ほとんどの解決策は、php.iniファイル(私がやった)でMagic Quotesを無効にするか、コアWPファイルを変更することです。
とにかく、問題はこれです:$ wpdb-> insertまたは$ wpdb-> updateを使用するたびに、単一引用符の前にスラッシュが追加されるのはなぜですか。たとえば:
私はイチゴを食べましたは私はイチゴを食べました
これが私が使ったサンプルコードです:
$id = $_POST['id'];
$title = $_POST['title'];
$message = $_POST['message'];
$wpdb->update('table_name', array('id'=>$id, 'title'=>$title, 'message'=>$message), array('id'=>$id))
同じ問題がここにありました: Wordpressデータベース出力-SQLインジェクションエスケープの削除 しかし、「マジッククオートを無効にする」以外は解決されませんでした
これに一日を費やした後、答えは次のとおりです:
Wordpressは、奇妙な実際の挿入ではなく、$ _ POST宣言でエスケープします。
$id = stripslashes_deep($_POST['id']); //added stripslashes_deep which removes WP escaping.
$title = stripslashes_deep($_POST['title']);
$message = stripslashes_deep($_POST['message']);
$wpdb->update('table_name', array('id'=>$id, 'title'=>$title, 'message'=>$message), array('id'=>$id));
これを行うと、WPは引用符の前にスラッシュを追加しません。
もう少し詳しい情報-WordPressは、バージョン3.0以降でオフになっている場合でも、「マジッククオート」を追加することで、人々に夢中になると思わせることにしました。 $ _REQUEST、$ _ GET、$ _ POST、$ _ COOKIE、または$ _SERVERへのアクセスはすべて影響を受けます。見る wp-includes/load.php
。
/* Add magic quotes to $_GET, $_POST, $_COOKIE, and $_SERVER.
* @since 3.0.0
*/
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は、組み込みのphpマジッククオート設定とget_magic_quotes_gpc()の値を無視し、マジッククオートを常に追加します(5.4のPHPから機能が削除された後でも)。
代わりにこれを使用できます
//replace $_POST with $POST
$POST = array_map( 'stripslashes_deep', $_POST);
$wpdb->insert(
'wp_mytable',
array(
'field_name' => $POST['field_name'],
'type' => $POST['type'],
'values' => serialize($POST['values']),
'unanswered_link' => $POST['unanswered_link'],
),
array(
'%s','%s','%s','%s'
)
);
WordPressがこれを行うのは、コアとプラグインのコードが多すぎて、そこにある引用符に依存しなくなっているためです。セキュリティホールを引き起こします。
http://codex.wordpress.org/Function_Reference/stripslashes_deep