Cum să escapi codul HTML permițând HTML-ul

22 oct. 2016, 06:00:29
Vizualizări: 26.8K
Voturi: 6

Sunt puțin confuz în legătură cu modul de utilizare a funcției de escapare pentru o variabilă care conține cod HTML. Am încercat să folosesc acest ghid https://codex.wordpress.org/Validating_Sanitizing_and_Escaping_User_Data dar nu am reușit să înțeleg exact cum.

    $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;

Întrebarea mea este cum pot escapa variabila $output fără a pierde HTML-ul din ea? Întreb acest lucru pentru că trimit acest cod pe ThemeForest, de unde am fost respins de câteva ori din cauza că nu am escapt codul. Așa că acum cred că este mai bine să escap aceste variabile, corect? Mulțumesc!

3
Comentarii

Scaparea HTML = Pierderea HTML!

Nabil Kadimi Nabil Kadimi
22 oct. 2016 08:13:12

Rețineți că variabila $output este complet inutilă aici, tot ce face este să introducă o oportunitate pentru scăpare prematură și o variabilă care este imposibil de scăpat.

Tom J Nowell Tom J Nowell
20 aug. 2021 22:59:41

mă confrunt cu o problemă similară în revizuire, Cum ai trecut de revizuire în acest caz?

shababhsiddique shababhsiddique
1 oct. 2021 08:00:19
Toate răspunsurile la întrebare 5
0
14

Cauți funcția wp_kses(). https://developer.wordpress.org/reference/functions/wp_kses/

Există și alte funcții ajutătoare precum wp_kses_post() și wp_kses_data()

24 sept. 2018 00:24:19
1

1. Escapare

  • Escapare Atribut <label for="<?php esc_attr( $tid ); ?>">

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


2. Traducere și Escapare

Notă:

  • textdomain ar trebui să fie un identificator unic pentru tema/plugin-ul tău.
  • Șirul tradus ar trebui să conțină o valoare statică. Dacă ai o valoare dinamică, atunci nu este necesar să o faci gata pentru traducere.


1. Escapare și traducere Atribut: <label for="<?php esc_attr( $tid ); ?>">

Nu este necesar să o faci gata pentru traducere. Dacă ai un șir static cu $tid, atunci trebuie să îl faci gata pentru traducere, de exemplu:

Invalid:

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

Valid:

<label for="<?php printf( esc_attr__( '%s text static', 'textdomain' ), $tid ); ?>">
  1. Escapare și traducere HTML: <label ..><?php esc_html__( 'Text', 'textdomain' ); ?></label>
8 mar. 2018 10:07:19
Comentarii

Acest comentariu nu răspunde la întrebare. Atât esc_attr() cât și esc_html() elimină orice HTML din șir.

Jory Hogeveen Jory Hogeveen
20 sept. 2018 15:53:51
1

încearcă cu această metodă. funcționează pentru mine. echo cu escapare HTML.

$output = '<p>';
$output .= '<label for="' . esc_attr( $this->get_field_id( 'title' ) ) . '">Titlu:</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>';   

$allowed_html = array(
    'input' => array(
        'type'  => array(),
        'id'    => array(),
        'name'  => array(),
        'value' => array(),
     ),
);

echo wp_kses($output ,$allowed_html );
20 aug. 2021 22:00:16
Comentarii

Dacă folosești checkbox trebuie să adaugi astfel

`$allowed_html = array( 'input' => array( 'type' => array(), 'id' => array(), 'name' => array(), 'value' => array(), 'checked' => array(), 'onclick' => array() <== Acesta este opțional ),

); `

ApsaraAruna ApsaraAruna
8 sept. 2022 13:29:39
0

Codul tău arată și funcționează bine pentru mine. HTML-ul din value este păstrat.

Singura mea recomandare ar fi să înfășori toate șirurile de text în __() sau _e() astfel încât acestea să poată fi ușor traduse. Acesta este un punct de vânzare frumos pe site-uri de piață precum ThemeForest, deoarece nu toată lumea dorește să folosească limba engleză.

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

Citește mai multe despre I18n în WordPress Codex.

22 oct. 2016 06:19:16
0

Dacă dorești să faci acest lucru în modul "WordPress", nu ai stoca HTML-ul într-o variabilă temporară, ci ai afișa direct.

?> 
<p>
    <label for="<?php esc_attr_e( $this->get_field_id( 'title' ) ); ?>"> <?php _e('Titlu:', '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: De asemenea, ai internationaliza șirurile de text.

12 dec. 2016 18:45:40