I understand with GET request they need to be entered into a URL and therefore need to be URL (percent) encoded so that they don't mean anything in the context of a server interpreting the URL.
But if data is in the body of a request rather than the URL then why does it need to be URL encoded?
Example:
Content-Type: application/x-www-form-urlencoded
which says "My body is url encoded" - so it must be url encoded. As to why the encoding is needed at all see https://mcmap.net/q/45139/-application-x-www-form-urlencoded-or-multipart-form-data – Flinger