Es scheint, dass es nach dem Auspacken keinen Unterschied gibt
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 );
}
Der einzige Unterschied zwischen den beiden Funktionen ist der am Ende angewendete Filter. WordPress fügt diesen Filtern nichts hinzu, daher sind sie in einer Standard-WP-Installation keine Operationen. Sie werden im Randfall bereitgestellt, damit jemand sie benötigt.
Schnelle Fragen und Antworten
Also sind sie standardmäßig identisch?
Ja! Die esc_attr
und esc_html
Funktionen haben die gleiche Implementierung
Sind die Filter identisch?
Der einzige Unterschied besteht darin, dass sie unterschiedliche Namen haben, auf die gleiche Weise funktionieren, auf die gleiche Weise verwendet werden und keiner der Filter im Kern verwendet wird.
Tun die Filter etwas?
Nein! Alle Escape-Aktionen werden in der Funktion ausgeführt, wenn wp_check_invalid_utf8
und _wp_specialchars
aufgerufen werden.
Die Filter entkommen nicht, sie bieten Plugins die Möglichkeit, zusätzliche Überprüfungen und Verarbeitungen durchzuführen.
Gibt es Randfälle?
Nur wenn Sie die Filter verwenden, sagen Sie, dass Sie angeschlossen sind, esc_html
aber nicht attribute_escape
, oder umgekehrt. Bei einer Standard-WP-Installation sind die beiden Funktionen identisch, ohne Unterschied.
Warum attribute_escape
und nicht esc_attr
?
Abwärtskompatibilität. Früher gab es eine attribute_escape
Funktion, die jetzt nach dem esc_
Hinzufügen der Stilfunktionen als veraltet markiert wird .
Warum sollte ich diese Filter verwenden?
¯\_(ツ)_/¯
Dies wäre eine seltene Situation. Einige Leute missbrauchen es möglicherweise auf die gleiche Weise, wie Übersetzungs-APIs missbraucht werden, um nach Ersatztext zu suchen. Dies ist bereits eine schlechte Praxis, da diese Filter häufig als kleiner Geschwindigkeitsverlust bezeichnet werden, der tausendfach vergrößert wird
Bedenken Sie jedoch, dass Sie die Sicherheit dieser Funktionen gefährden können, wenn Sie nicht aufpassen. Aus diesem Grund sind die Filter gefährlich.
Muss ich mir darüber Sorgen machen?
Nein. Sie müssen sich nur Sorgen machen, wenn Sie diese Filter verwendet haben, die für sich genommen massive rote Alarme hätten auslösen müssen, dass etwas in Ihrer Entwicklung ernsthaft schief gelaufen ist.
Die Funktionen esc_attr
und esc_html
sind sicher zu bedienen und entgehen Inhalten. Sie haben eine ethische und moralische Verpflichtung, sie zu verwenden, wenn Sie die Sicherheit Ihres Codes schätzen
Heißt das, ich sollte nur verwenden esc_html
?
Nein, bei der Flucht geht es darum, Erwartungen zu setzen. Wenn Sie ein Attribut erwarten, verwenden Sie esc_attr
. Nur weil es momentan funktional gleich ist, heißt das nicht, dass sich dies mit einer Sicherheitsversion in Zukunft nicht ändern wird