web-dev-qa-db-ja.com

Wp_kses_postで保存すると、wp_editor内で引用符がエスケープされる

こんにちは私はユーザーが彼らが既に投稿やページからwp_editor()を使って慣れているエディタの便利さでHTMLメールを作成することを許可する設定画面を持っています。

値が返されるときに引用符で囲まれているテキストを保存しようとした場合を除いて、すべてうまく機能しているようです。これは、wp_kses_post();データをサニタイズしますが、ユーザーが引用符付きのHTML Eメールを作成したいとしたらどうでしょうか。

Str_replaceを実行できることはわかっていますが、別の方法はありますか?私もwp_kses_post()を使うべきです。見積もりを許可する予定がある場合

wp_editorコード:

wp_nonce_field('tld_wcdpue_settings_nonce_action', 'tld_wcdpue_settings_nonce_field');

$tld_wcdpue_settings_email_content = get_option('tld_wcdpue_settings_email_content');

wp_editor( $tld_wcdpue_settings_email_content, 'tld_wcdpue_settings_wpeditor', array( 'wpautop' => false ) );

wp_editor保存コード:

if( isset(//does authentication here) ){

update_option( 'tld_wcdpue_settings_email_content', wp_kses_post( $_POST['tld_wcdpue_settings_wpeditor'] ) );

}

これがDBに保存されるとエスケープされるので、戻り値は次のとおりです。

enter image description here 

私は単純にstr_replaceを実行できることを知っていますが、それはwp_kses_postの目的を無効にしているのではないでしょうか?この場合でもそれを使用すべきですか?また、データベースからデータを取得するときにエスケープしていないことに気付きました。エディタでHTMLをレンダリングしたいので、どうすればよいのかわかりません。

1
Uriahs Victor

Wordpressは、スーパーグローバル変数で見付かった引用符を常にエスケープします。それは https://developer.wordpress.org/reference/functions/wp_magic_quotes/ で行われます。

あなたはそれをDBに保存する前にstripslashesで取り除きたいと思うでしょう。何かのようなもの

update_option( 'tld_wcdpue_settings_email_content', wp_kses_post( stripslashes($_POST['tld_wcdpue_settings_wpeditor'] ) ));

2
Mark Kaplun

wp_kses_post()を使う必要があるとは思わない。

update_option()sanitize_option()を実行します。

それをテストして、何が起こるのか私に知らせてください。

0
cowgill