web-dev-qa-db-fra.com

Comment échapper au code html avec html autorisé

je suis un peu confus comment utiliser la fonction d'échappement sur une variable ayant du code HTML. J'ai essayé ceci https://codex.wordpress.org/Validating_Sanitizing_and_Escaping_User_Data mais je ne pouvais pas le comprendre. voici mon code:

    $output = '<p>';
    $output .= '<label for="' . esc_attr( $this->get_field_id( 'title' ) ) . '">Title:</label>';
    $output .= '<input type="text" class="widefat" id="' . esc_attr( $this->get_field_id( 'title' ) ) . '" name="' . esc_attr( $this->get_field_name( 'title' ) ) . '" value="' . esc_attr( $title ) . '"';
    $output .= '</p>';   
    echo $output;

Ma question est de savoir comment je peux échapper à $ output sans perdre de code HTML dedans? Je demande parce que je soumets ce code sur Themeforest. d'où j'ai été rejeté plusieurs fois pour ne pas avoir échappé à du code. Alors maintenant, je pense qu'il est préférable d'échapper à ces variables. écrire? Je vous remercie!

2
Foo01

Si vous voulez le faire de la "manière WordPress", vous ne stockeriez pas votre code HTML dans une variable temporaire, vous produiriez directement.

?> 
<p>
    <label for="<?php esc_attr_e( $this->get_field_id( 'title' ) ); ?>"> <?php _e('Title:', 'tex-domain'); ?></label>
    <input type="text" class="widefat" id="<?php esc_attr_e( $this->get_field_id( 'title' ) ); ?>" value="<?php esc_attr_e( $title ); ?>" />
</p>
<?php 

P.S: Vous voudriez aussi internationaliser vos chaînes de texte.

1
guillaume.molter

Vous recherchez wp_kses(). https://codex.wordpress.org/Function_Reference/wp_kses

Il y a plus de fonctions d'aide telles que wp_kses_post() et wp_kses_data()

0
Jory Hogeveen

Votre code a l'air et fonctionne bien pour moi. Le code HTML dans value est préservé.

Ma seule recommandation serait d'envelopper toutes vos chaînes de texte dans __() ou _e() afin qu'elles puissent être facilement traduites. C’est un bon argument de vente sur des sites marchands comme ThemeForest, car tout le monde ne veut pas utiliser l’anglais.

$output .= '<label for="' . esc_attr( $tid ) . '">' . __( 'Title:', 'your-text-domain' ) . '</label>';

En savoir plus sur I18n sur le Codex WordPress .

0
cowgill

1. S'échapper

  • Échappement d'attribut <label for="<?php esc_attr( $tid ); ?>">

  • Échappement HTML <label ..><?php esc_html( 'Text' ); ?></label>


2. Traduction et évasion

Remarque:

  • textdomain devrait être votre propre thème/plugin.
  • La chaîne traduite doit contenir une valeur statique. Si vous avez une valeur dynamique, inutile de la préparer pour la traduction.


1. Echap et traduction Attribut: <label for="<?php esc_attr( $tid ); ?>">

Pas besoin de faire la traduction prête. Si vous avez une chaîne statique avec $tid, vous devez préparer cette transition, par exemple.

Invalide:

<label for="<?php esc_attr__( $tid, 'textdomain' ) ); ?>">
<label for="<?php printf( esc_attr__( '%s', 'textdomain' ), $tid ); ?>">

Valable:

<label for="<?php printf( esc_attr__( '%s static text', 'textdomain' ), $tid ); ?>">
  1. Échapper et traduire HTML: <label ..><?php esc_html__( 'Text', 'textdomain' ); ?></label>
0
maheshwaghmare