Sembrerebbe che fuori dalla scatola non ci sia differenza
function esc_html( $text ) {
$safe_text = wp_check_invalid_utf8( $text );
$safe_text = _wp_specialchars( $safe_text, ENT_QUOTES );
/**
* Filters a string cleaned and escaped for output in HTML.
*
* Text passed to esc_html() is stripped of invalid or special characters
* before output.
*
* @since 2.8.0
*
* @param string $safe_text The text after it has been escaped.
* @param string $text The text prior to being escaped.
*/
return apply_filters( 'esc_html', $safe_text, $text );
}
function esc_attr( $text ) {
$safe_text = wp_check_invalid_utf8( $text );
$safe_text = _wp_specialchars( $safe_text, ENT_QUOTES );
/**
* Filters a string cleaned and escaped for output in an HTML attribute.
*
* Text passed to esc_attr() is stripped of invalid or special characters
* before output.
*
* @since 2.0.6
*
* @param string $safe_text The text after it has been escaped.
* @param string $text The text prior to being escaped.
*/
return apply_filters( 'attribute_escape', $safe_text, $text );
}
L'unica differenza tra le 2 funzioni è il filtro applicato alla fine. WordPress non aggiunge nulla a questi filtri, quindi in un'installazione WP standard non sono operazioni. Sono forniti nel caso limite che qualcuno potrebbe averne bisogno.
Domande e risposte rapide
Quindi per impostazione predefinita sono identici?
Sì! Le funzioni esc_attr
e esc_html
hanno la stessa implementazione
I filtri sono identici?
L'unica differenza è che hanno nomi diversi, funzionano allo stesso modo, sono usati allo stesso modo e nessuno dei due filtri è usato nel core.
I filtri fanno qualcosa?
No! Tutte le fughe vengono eseguite nella funzione quando wp_check_invalid_utf8
e _wp_specialchars
vengono chiamate.
I filtri non eseguono l'escaping, sono un'opportunità per i plug-in di eseguire controlli ed elaborazioni aggiuntivi.
Ci sono casi limite?
Solo se usi i filtri, supponi di esserti collegato esc_html
ma non attribute_escape
viceversa, o viceversa. Per un'installazione WP standard, le 2 funzioni sono identiche, senza alcuna differenza.
Perché attribute_escape
e no esc_attr
?
Compatibilità con le versioni precedenti. C'era una attribute_escape
funzione, che ora è contrassegnata come obsoleta dopo l' esc_
aggiunta delle funzioni di stile.
Perché dovrei usare questi filtri?
¯\_(ツ)_/¯
questa sarebbe una situazione rara. Alcune persone potrebbero abusarne allo stesso modo in cui le API di traduzione vengono abusate per cercare di sostituire il testo. Questa è già una cattiva pratica poiché quei filtri vengono chiamati molto una piccola perdita di velocità viene ingrandita migliaia di volte
Ma considera che se non stai attento potresti compromettere la sicurezza di queste funzioni annullando l'escape che hanno aggiunto o aggiungendo contenuto senza escape alla fine. Per tale motivo i filtri sono pericolosi.
Devo preoccuparmi di questo?
No. Devi solo preoccuparti se hai usato quei filtri, che da soli avrebbero dovuto innescare enormi allarmi rossi che qualcosa nel tuo sviluppo è andato seriamente storto.
Le funzioni esc_attr
e esc_html
sono sicure da usare e sfuggono al contenuto. Hai un obbligo etico e morale di usarli se apprezzi la sicurezza del tuo codice
Questo significa che dovrei semplicemente usare esc_html
?
No, fuggire significa stabilire le aspettative. Se ti aspetti un attributo, usa esc_attr
. Solo perché è funzionalmente lo stesso al momento, non significa che non cambierà in futuro con una versione di sicurezza