echo $begrüßung;
ich will Daten aus einer Datenbank auslesen und die Umlaute ä, ö ü etc. gegen ae, oe und ue austauschen. [...] Allerdings werden die Umlaute einfach nicht ausgetauscht.
Dann liegen die vom DBMS kommenden Umlaute in einer anderen Kodierung vor als die, die in deinem Script stehen. Lass die die Daten aus dem DBMS und auch die im Script notierte Strings mit bin2hex() in Hexwerte wandeln und gib diese aus. Du wirst dann Unterschiede feststellen können.
Die Kollation für dieses Feld in MySQL ist auf "latin1_swedish_ci" gestellt, allerdings hat auch ein Umstellen auf "latin1_german2_ci" umgestellt und es funktioniert immer noch nicht.
Die Kollationsangabe (das ist der Teil swedish_ci und german2_ci) hat keinen Einfluss auf die Kodierung der Zeichen. Die bleiben in deinem Fall immer Latin1-kodiert. Wenn du allerdings mit MySQL kommunizierst hast du eine Client-Verbindung und für die kann eine eigene Kodierung festgelegt werden. Dies sollte auch gemacht werden, damit beide Seiten ausdrücklich Bescheid wissen und nicht nur durch Zufall die gleiche Kodierung verwenden. Um die Verbindungskodierung festzulegen kann man nach jedem Verbindungsaufbau ein mysql_set_charset() aufrufen oder zur Not ein "SET NAMES"-Statement absetzen.
Der MySQL-Server kodiert alle Daten aus den Feldern in die Verbindungskodierung um und umgekehrt.
Zwei Lösungsvorschläge: Die Verbindungskodierung solltest du immer aushandeln. Und du musst dir Gedanken machen, in welcher Kodierung die Daten in deinen Scripten vorliegen und welche du mit dem Browser. Wenn du alles richtig gemacht hast, hat sich dein Problem in Luft aufgelöst. Andererseits kannst du mit bin2hex() erstmal das Problem genauer analysieren und erst anschließend den ersten Vorschlag umsetzen.
echo "$verabschiedung $name";