Differenza tra esc_url () e esc_url_raw ()


9

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

Sono confuso su quando dovrebbe essere usato uno di loro.

Supponendo di avere questo URL:, http://site.com/?getsomejavascript=1che viene generato dinamicamente javascript:

  • se includo lo script con esc_url(add_query_arg('apples', 420)), ottengo http://site.com/?getsomejavascript=1&apples=420e si interrompe a causa di quei #038;riferimenti

  • se uso esc_url_raw(add_query_arg('apples', 420))ottengo l'URL corretto:http://site.com/?getsomejavascript=1&apples=420

ma nella documentazione scopro che esc_url_raw dovrebbe essere usato solo per sfuggire agli URL inseriti nel database ...

Risposte:


10

Dalla voce Codex per Convalida dati: URL :

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

Utilizzare sempre esc_url quando si disinfettano gli URL (nei nodi di testo, nei nodi di attributo o in qualsiasi altro luogo). Rifiuta gli URL che non dispongono di uno dei protocolli della whitelist forniti (impostazione predefinita di http, https, ftp, ftps, mailto, news, irc, gopher, nntp, feed e telnet), elimina i caratteri non validi e rimuove i caratteri pericolosi. Obsoleto dal 3.0: clean_url () Questa funzione codifica i caratteri come entità HTML: usalo quando generi un documento (X) HTML o XML. Codifica e commerciali (&) e virgolette singole (') come riferimenti di entità numeriche (&,').

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

Per l'inserimento di un URL nel database. Questa funzione non codifica i caratteri come entità HTML: utilizzala quando memorizzi un URL o in altri casi in cui è necessario l'URL non codificato. Questa funzionalità può essere replicata nella vecchia funzione clean_url impostando $ context su db.

Quindi, le differenze principali sembrano essere:

  1. esc_url()codifica entità HTML, mentre esc_url_raw()non lo fa
  2. esc_url()è destinato all'output , mentre esc_url_raw()è destinato all'archiviazione del database

MODIFICARE:

Poiché stai codificando (o salvando / memorizzando separatamente) l'URL effettivo dalla stringa di query e quindi aggiungendo la stringa di query tramite [add_query_arg()][2], potrebbe essere meglio sfuggire alla stringa di query accodata tramite esc_js(), anziché esc_url()?

Per esempio:

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

2
ok, ma esc_url()non funziona correttamente quando si hanno argomenti di query in un URL che si desidera produrre
onetrickpony

Che ne dici di usare esc_js()per sfuggire solo ai dati aggiunti tramite add_query_arg()? Vedi modifica in risposta, sopra.
Chip Bennett,

Non l'ho provato, ma non ha senso :) torneranno entrambi esc_js ('mele') o 'mele' apples. Il problema è in add_query_arg quando si unisce "mele" con altri argomenti con&
onetrickpony

Quindi, se i dati sono affidabili (cioè statici), perché scappare?
Chip Bennett

Non sono del tutto sicuro che sia sicuro non sfuggire. Fondamentalmente sto includendo lo script usando qualcosa di simile<script type="text/javascript" src="<?= $_SERVER['REQUEST_URI'] ?>'/?javascriptcode=1"></script>
onetrickpony
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.