if ($vorname == "ü")
...funktioniert nicht.
Wenn ein erwarteter Vergleich mit einer Variable aus unerklärlichen Gründen nicht funktioniert, sollte grundsätzlich der erste Ansatz sein, den Inhalt der Variablen auszugeben.
In der URL-Zeile wird ü zu "%C3%BC", aber wenn ich auf "%C3%BC" abfrage, funktionierts auch nicht.
Nein, was in der URL als %+Hexwert erscheint, wird vom Webserver automatisch in einen entsprechenden Bytewert umgesetzt, in diesem Fall 0xC3 gefolgt von 0xBC. Es liegt dann am Webserver, diese Bytefolge richtig zu dekodieren. Da der Webserver aber nicht wirklich wissen kann, welchen Zeichensatz der Browser für die Kodierung benutzt hat, funktioniert das nicht immer.
Probiere es mit ü, das sind die beiden Buchstaben, die in der ISO-8859-1-Tabelle für die zwei Bytewerte stehen, die wiederum der Browser für das ü aus der Unicode-Tabelle gezogen hat.
Wie kodiert man also Sonderzeichen in PHP?
Das ist nicht das Problem, du musst die Zeichen so kodieren, wie sie vom Browser gesendet und von Webserver und PHP empfangen werden.
Leider hast du bei URL-Parametern weder auf das eine, noch auf das andere Einfluss. Benutze also besser POST-Formulare mit dem Attribut accept-charset, so wie diese Forumssoftware es auch macht.