Formulare, PHP und Mysql in UTF-8

Immer wieder ein weit verbreitetes Problem(chen).

Man möchte eine UTF-8 konforme Webseite mit PHP erstellen, setzt dafür im HTML Header den Content Type auf UTF-8.

<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />

Nun hat man Formulare die User-Eingaben ermöglichen und wundert sich, wieso trotzdem in der Datenbank Hyroglyphen landen, oder z.b. Umlaute aus der DB falsch im Browser dargestellt werden.

In den meisten Fällen liegt das Problem einfach an PHP selbst.

Der Meta-Tag oben gilt ja nur für den Browser. Er sagt lediglich dem Browser, das der Content der Webseite in UTF-8 ausgegeben werden soll.
Was aber mit den Formulardaten?

PHP weiss nichts von dem UTF-8!

Die Zeichencodierung muss einfach nur in PHP und HTML die gleiche sein!

Wenn man auf umständliche Umwandlungen in PHP mittels utf8_decode() bzw. utf8_encode() an den meisten Stellen verzichten möchte; kann man zur Sicherheit einfach im PHP als erste Ausgabe folgendes in den Header schreiben:

header("Content-type: text/html; charset=utf-8");