Always specify the content-type header with the appropriate content type / subtype and character encoding.
# plain text
header('content-type: text/plain; charset=utf-8');
# html
header('content-type: text/html; charset=utf-8');
IE was the only browser (until IE8 iirc) who did not respect http content-type header and instead gave precedence to the content type meta tag when it comes to character encoding.
But IE8 (IE9 as well?) does not respect the type/subtype specification of content-type headers - for "security reasons" (it makes no sense). They do however, albeit this being done for "security reasons" also specify a proprietary header called x-content-type-options which, wtih a value of "no-sniff" makes IE8 stopp sniffing and instead respect the content-type header.
header('x-content-type-options: no-sniff');
All in all, if you target IE7-, you should use <meta http-equiv="content-type" value="text/html; charset=utf-8>. If you don't, you can skip this and stick with only the content-type header.