echo $begrüßung;
Beim speichern geht es um MySQL, also benutzte mysql_real_escape_string um die zu speichernden Strings von für MySQL schädlichen Zeichen zu befreien.
Diese Funktion entfernt keine 'schädlichen' Zeichen. Es gibt im Kontext eines SQL-Statements bestimmte Zeichen mit einer Sonderbedeutung. Damit man solche Zeichen auch als Datenbestandteil verwenden kann, müssen sie entsprechend präpariert werden. Einigen wird ein Backslash vorangestellt (", ' und ), andere werden in einer Ersatzdarstellung notiert (z.B. \r und \n).
Bei der Ausgabe werden diese Maskierungen von MySQL selbsttätig entfernt.
Sie werden schon beim Parsen des SQL-Statements von MySQL dekodiert, denn sie sind nur dazu da, den Transport innerhalb des Textes des SQL-Statments zu überstehen. In der Datenbank landen sie in - sagen wir mal - reiner Form. (Wie genau das abgelegt wird ist MySQLs Angelegenheit.)
Das Abfrageergebnis eines Statements kommt auf anderem Weg aus der Datenbank. Für diesen Weg (Kontext) sind keine Maskierungen erforderlich. Hier werden die Zeichen in ihrer ursprünglich gemeinten Form übertragen.
Dafür wird, wegen der Ausgabe in einer HTML-Seite, die Maskierung der in diesem Zusammenhang gefährlichen Zeichen wichtig.
Von "gefährlichen" oder "schädlichen" Zeichen zu sprechen ist nicht richtig, denn diese Eigenschaften haben diese Zeichen nicht. Sie haben einfach nur eine Sonderbedeutung in einem bestimmten Kontext. Wenn sie diese Sonderbedeutung nicht mehr haben sollen, müssen sie entsprechen den Vorschriften des Kontextes behandelt werden.
Und die entfernt/maskiert man mit
htmlentities
.
htmlentities() behandelt viel mehr Zeichen als für HTML notwendig ist. htmlspecialchars() ist im Prinzip ausreichend.
echo "$verabschiedung $name";