Doch leider setzt er vor die veränderten werte " und ' also vor " und ' ein ''. Meine Frage also, warum wird dieses \ vor die geänderten Zeichen gesetzt?
while(list($key,$val) = each($_POST))
Das hat nichts mit htmlspecialchars() zu tun, dafür ist die Formularverarbeitung von PHP verantwortlich, d.h. Du bekommst die Rückstriche schon in $_POST geliefert.
Ursache dafür ist eine eingeschaltete Option namens magic_quotes_gpc. Entweder diese ausschalten oder die Funktion stripslashes() auf die Formulardaten anwenden.