Unterschied zwischen esc_url () und esc_url_raw ()


9

http://core.trac.wordpress.org/browser/trunk/wp-includes/formatting.php#L2239

Ich bin verwirrt darüber, wann einer von beiden verwendet werden soll.

Angenommen, ich habe diese URL : http://site.com/?getsomejavascript=1, die dynamisch generiertes Javascript ist:

  • Wenn ich das Skript mit einbeziehe esc_url(add_query_arg('apples', 420)), bekomme ich http://site.com/?getsomejavascript=1&apples=420und es bricht aufgrund dieser #038;Referenzen

  • Wenn ich benutze, esc_url_raw(add_query_arg('apples', 420))bekomme ich die richtige URL:http://site.com/?getsomejavascript=1&apples=420

aber in der Dokumentation finde ich heraus, dass esc_url_raw nur verwendet werden sollte, um in die Datenbank eingefügte URLs zu umgehen ...

Antworten:


10

Aus dem Codex-Eintrag für die Datenvalidierung: URLs :

esc_url( $url, (array) $protocols = null ) (seit 2.8)

Verwenden Sie immer esc_url, wenn Sie URLs bereinigen (in Textknoten, Attributknoten oder anderswo). Lehnt URLs ab, die nicht über eines der bereitgestellten Whitelist-Protokolle verfügen (standardmäßig http, https, ftp, ftps, mailto, news, irc, gopher, nntp, feed und telnet), entfernt ungültige Zeichen und entfernt gefährliche Zeichen. Veraltet seit 3.0: clean_url () Diese Funktion codiert Zeichen als HTML-Entitäten: Verwenden Sie sie beim Generieren eines (X) HTML- oder XML-Dokuments. Codiert kaufmännisches Und (&) und einfache Anführungszeichen (') als numerische Entitätsreferenzen (&,').

esc_url_raw( $url, (array) $protocols = null ) (seit 2.8)

Zum Einfügen einer URL in die Datenbank. Diese Funktion codiert keine Zeichen als HTML-Entitäten: Verwenden Sie sie beim Speichern einer URL oder in anderen Fällen, in denen Sie die nicht codierte URL benötigen. Diese Funktionalität kann in der alten Funktion clean_url repliziert werden, indem $ context auf db gesetzt wird.

Die Hauptunterschiede scheinen also zu sein:

  1. esc_url()codiert HTML-Entitäten, esc_url_raw()nicht jedoch
  2. esc_url()ist für die Ausgabe vorgesehen , während esc_url_raw()es für die Datenbankspeicherung vorgesehen ist

BEARBEITEN:

Da Sie entweder die tatsächliche URL aus der Abfragezeichenfolge fest codieren (oder separat speichern / speichern) und dann die Abfragezeichenfolge über anhängen [add_query_arg()][2], ist es möglicherweise besser, die angehängte Abfragezeichenfolge über zu esc_js()maskieren, als esc_url()?

Zum Beispiel:

add_query_arg( esc_js( 'apples' ), esc_js( '420' ), $myurl )

2
ok, aber das esc_url()funktioniert nicht richtig, wenn Sie Abfrageargumente in einer URL haben, die Sie ausgeben
— möchten

Was ist mit der Verwendung esc_js(), um nur den Daten zu entkommen, die über hinzugefügt wurden add_query_arg()? Siehe oben in Antwort bearbeiten.
— Chip Bennett

Ich habe es nicht ausprobiert, aber das macht keinen Sinn :) Sowohl esc_js ('Äpfel') als auch 'Äpfel' werden zurückkehren apples. Das Problem ist in add_query_arg, wenn 'Äpfel' mit anderen Argumenten mit&
— onetrickpony

Wenn die Daten dann vertrauenswürdig sind (dh statisch), warum überhaupt entkommen?
— Chip Bennett

Ich bin mir nicht ganz sicher, ob es sicher ist, ihm nicht zu entkommen. Ich schließe im Grunde Skript mit so etwas wie<script type="text/javascript" src="<?= $_SERVER['REQUEST_URI'] ?>'/?javascriptcode=1"></script>
— onetrickpony
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.