the XML prologue thingie is actually one thing that won’t send them into Quirks Mode: when IE7 came out, it was trained to look for that and ignore it if it was there. So with the XML prologue, IE6 would indeed still go into Quirks Mode, but IE7 wouldn’t.
But I noticed the OP is doing some force-the-browser-to-act-new chrome/edge thing. The point of that tag is, someone may be running a new and nice version of IE (say, 8 or 9) but have set it (even accidentally, or are viewing local files which for some reason do the same thing… this is online IE right?) to Compat Mode, IE7 mode, or something else retarded.
<meta http-equiv=“X-UA-Compatible” value=“IE=edge”>
Now, most of us who are already making our pages work well with IE6 or 7 and up don’t care: if the user wants to view our pages as if their IE was 7, fine. They just get the IE7 version, which, since we built for it, works anyway (might be a bit uglier, but whatever. Users who care will investigate and maybe discover what a browser is… most won’t).
But I’d remove that line first and see if you page changes. Though agreed with others that we’d be more likely to spot a problem somewhere if you posted either a link or the full code.
If you have sensitive information you can make a dummy copy (where all the text is blah blah) that still shows the problem.
Also, what’s telling you the page is in Quirks Mode? Could it just be IE in retard mode? It can do that without being in Quirks.
Nah, doesn’t matter.
When they were writing HTML5, they also needed to document browser parsers. Turned out, every parser was already dealing with people writing the meta charset tag all retarded anyway (mostly with <meta http-equiv=“Content-Type” content=“text/html;" charset="utf-8” > and similar) so it turned out the tag as <meta charset=“utf-8”> did exactly the same thing, and so why type more? So that’s why it’s in the HTML5 specs, but you could add it to HTML4 or XHTML and only get validator complaints. Browser would be fine.
As for position, that’s more for security and performance (both minor): there is a small, obscure hack called “the utf-7 hack” where anything between the opening head until the meta charset tag could possibly be open to interpretation as a “script” when played around with by script kiddies. This works because of the performance reason: before the browser gets to that line, while it may or may not have bothered reading the HTTP Header from the server (tho it should have), it still will make a guesstimate about what charset the document is until it gets that confirmation. When it sees that, it goes back to the top (the doctype) and starts reading again with certainty.
IE6 would actually use heuristics to determine the likely charset. It was most vulnerable to the hack for the same reason. My information may be outdated by now too: possibly newer browsers take the server at its word and ignore the meta, and only read it if there’s no header info in the first place (not uncommon).
So for those reasons, it’s “a good idea” to make the first tag after your opening <head> to be the meta charset tag.