web-dev-qa-db-fra.com

Citations échappées dans wp_editor lors de l'enregistrement avec wp_kses_post

Bonjour, j'ai un écran de configuration dans lequel je permets aux utilisateurs de créer des courriels HTML avec le confort de l'éditeur auquel ils sont déjà habitués à partir de publications et de pages utilisant wp_editor ();

Tout semble bien fonctionner, sauf lorsque j'essaie de sauvegarder des textes entre guillemets lorsque la valeur est renvoyée à l'échappement, je sais que c'est parce que wp_kses_post (); nettoie les données, mais que se passe-t-il si l’utilisateur souhaite créer un courrier électronique HTML avec des guillemets?

Je sais que je pourrais faire une pause, mais y a-t-il un autre moyen? Devrais-je même utiliser wp_kses_post (); si je prévois d'autoriser les devis?

code 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 ) );

code de sauvegarde wp_editor:

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

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

}

Lorsque ceci est sauvegardé dans la base de données, il est échappé et le retour est:

 enter image description here 

Je sais que je pourrais simplement faire un str_replace mais ne serait-ce pas nier le but de wp_kses_post? Devrais-je même l'utiliser dans ce cas? Je me rends également compte que je ne m'échappe pas lorsque j'extrais les données de la base de données, je ne sais pas comment je devrais le faire car je veux que le rendu HTML apparaisse dans l'éditeur

1
Uriahs Victor

Wordpress échappe toujours aux guillemets rencontrés dans les variables super globales. Cela se fait dans https://developer.wordpress.org/reference/functions/wp_magic_quotes/

Vous voudrez probablement le supprimer avec stripslashes avant de l'enregistrer dans la base de données. quelque chose comme

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

2
Mark Kaplun

Je ne crois pas que vous ayez besoin d'utiliser wp_kses_post().

update_option() lance sanitize_option() qui devrait s'occuper de tout pour vous.

Testez-le et laissez-moi savoir ce qui se passe.

0
cowgill