esc_html
e esc_attr
são quase idênticos, a única diferença é que a saída é passada por filtros com nomes diferentes ( esc_html
e attribute_escape
respectivamente).
esc_url
é mais complexo e específico, lida com caracteres que não podem estar em URLs e protocolos permitidos (lista dos quais podem ser passados como segundo argumento). Ele também prefixará a entrada com o protocolo http://
se não estiver presente (e o link não for relativo).