The other day I was trying to pass an encoded version of "id=123" to a customer's search API. I tried
var result = HttpUtility.HtmlEncode("id=123");
but it returned "id=123". I stared at the screen, scratched my head, and jumped on Google.
A quick search reminded me that HtmlEncode is for escaping HTML, but it leaves everything else alone. So
var result = HttpUtility.HtmlEncode("<br/>");
returns "<br/>". All the less thans and greater thans get escaped, but the rest is pretty much the same.
UrlEncode is for cases where you want to escape a URL, so
var result = HttpUtility.UrlEncode("id=123");
returns "id%3d123", which is what I wanted in the first place. By comparison, if you UrlEncode the "<br/>" tag, like
var result = HttpUtility.UrlEncode("<br/>");
you'll get back "%3cbr%2f%3e". It's encoding the less than, the slash, and the greater than, but it's encoding them with URL-type escapes instead of HTML-style ones.
I guess it's been a while since I paid attention to encoding. Not all encoding methods are equal in the ASP.NET framework, so be careful which one you use.