URL / HTML Escaping / Codificación

Siempre me han confundido con URL / HTML Encoding / Escaping. Estoy usando PHP, así que quiero aclarar algunas cosas.

¿Puedo decir que siempre debería usar

urlencode: para partes de cadena de consulta individuales

$url = 'http://test.com?param1=' . urlencode('some data') . '&param2=' . urlencode('something else');

htmlentities: para escapar de caracteres especiales como<>&nbsp;para que el navegador lo represente correctamente

¿Habría otros lugares donde podría usar cada función? No soy bueno en todas estas cosas de escape, siempre confundido por ellas