De la entrada del Codex para Validación de datos: URL :
esc_url( $url, (array) $protocols =
null ) (desde 2.8)
Utilice siempre esc_url al desinfectar URL (en nodos de texto, nodos de atributos o en cualquier otro lugar). Rechaza las URL que no tienen uno de los protocolos incluidos en la lista blanca (por defecto a http, https, ftp, ftps, mailto, news, irc, gopher, nntp, feed y telnet), elimina los caracteres no válidos y elimina los caracteres peligrosos. En desuso desde 3.0: clean_url () Esta función codifica caracteres como entidades HTML: úsela al generar un documento (X) HTML o XML. Codifica símbolos de unión (&) y comillas simples (') como referencias de entidad numérica (&,').
esc_url_raw( $url, (array) $protocols
= null ) (desde 2.8)
Para insertar una URL en la base de datos. Esta función no codifica caracteres como entidades HTML: úsela cuando almacene una URL o en otros casos donde necesite la URL no codificada. Esta funcionalidad se puede replicar en la antigua función clean_url estableciendo $ context en db.
Entonces, las principales diferencias parecen ser:
esc_url()codifica entidades HTML, mientras esc_url_raw()que no
esc_url()está destinado a la
salida , mientras que esc_url_raw()está destinado al almacenamiento de la base de datos
EDITAR:
Dado que está codificando (o guardando / almacenando por separado) la URL real de la cadena de consulta, y luego agrega la cadena de consulta a través de [add_query_arg()][2], ¿podría ser mejor escapar de su cadena de consulta adjunta en esc_js()lugar de esc_url()?
Por ejemplo:
add_query_arg( esc_js( 'apples' ), esc_js( '420' ), $myurl )
esc_url()no funciona correctamente cuando tiene argumentos de consulta en una URL que desea generaresc_js()para escapar solo de los datos agregados a través deadd_query_arg()? Ver editar en respuesta, arriba.apples. El problema está en add_query_arg cuando une 'manzanas' con otros argumentos con&<script type="text/javascript" src="<?= $_SERVER['REQUEST_URI'] ?>'/?javascriptcode=1"></script>