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.