First of all, flags are really bad for languages since there's an n:m relationship. Which flag would you use for "English"? The USA flag? The Flag of England? The Union Jack?
If you offer only "English" then depending on if you write "center" or "centre" you may offend either USA or British people. Same for "German", where a Swiss may be offended to see "Straße" while a German could be offended by seeing "Strasse". Of course most people won't care about that and I bet most Brits are used to see "color" without a 'u' on the internet, but from experience I can say that there are people who care about or even get offended by that.
But even if using textual representation for languages like "English" is not perfect, offering every language-country possibility (en-US, en-GB, en-??...) isn't a viable route in most cases since there are way to many combinations.
Just think of yourself (assuming you're from the USA): would you rather see the word "English" in a language selector or the Flag of England?
So what should you do? I'd suggest going with textual representations like "English" or the ISO 639-x shortcodes ("en" or "eng"). Being German that's easy to say for me, and I know a handful of people who'd like me to distinguish between de_DE, de_AT and de_CH.
From what I've read about it--by people who thought long and hard about this issue--the generally most accepted solution seems to be the Wikipedia way: use the name of the language as its written in in the language itself.
The reason for the latter is that, say the site is originally presented in Russian, I don't know how "Dutch" is written in Russian so I couldn't pick it, but I do know what "Nederlands" means (FYI, that's the Dutch word for "Dutch", beats me why you English-speakers don't call it "Netherlandish", but each to their own I guess ;) which again demonstrates names of the same language in different languages can vary a lot).
Though I suppose if you're really tight on space, ISO codes would probably also work.
Note that Wikipedia itself is sometimes a rather extreme example; most websites/applications will only offer a choice between a small handful of languages.
When the list of languages in the sidebar of Wikipedia is very long, it's not the most user-friendly method of selecting one. On the other hand, with flags that would be much worse, bordering on impossible (while the UK and US flags are pretty unique, there's a couple of flags that are very hard to distinguish from the flag of the Netherlands, for instance).
I really wonder if there might be some creative better solution to language-selection than "the Wikipedia way", but I really want to stress that using country flags is not that solution, for a variety of usability reasons, political reasons and emotional reasons, most of which are probably outlined somewhere in this discussion so I won't repeat them all.
I have to admit I have been guilty of using a German/Dutch/French flag for language selection on a website I developed many years ago--I didn't realize it was a bad idea back then (for instance, the flag of Belgium has the same colours as the flag of Germany in a different order, but they speak Dutch and French there, while the flag of France and the one of the Netherlands differ mainly by a 90 degrees rotation) (and the blues are subtly different, afaik).