Hallo Michael,
Ich weiß, dass die Browser normalerweise automatisch escapen,
Nein, tun sie nicht. Es gibt in PHP eine Einstellung namens magic_quotes_gpc, die alle von außen kommenden Zeichenketten automatisch mit \ versehen - was zur Folge hat, dass Du denkst, dass der Browser dies tut - das stimmt aber nicht. _Kein_ Browser kodiert " derart.
Meiner Ansicht nach ist magic_quotes_qpc Schwachsinn. Denn der Computer kann ja nicht von Anfang an Wissen, was ich in meinem Script mit den Daten anstelle. Deswegen kontrolliere ich am Anfang von meinen Skripten, ob magic_quotes_gpc gesetzt ist und falls ja, dann wende ich stripslashes() auf alle Eingabedaten an. Dann habe ich - egal unter welcher PHP-Installation - den reinen Text, den der Benutzer senden wollte.
Wenn ich diesen Text nun in eine Datenbank schreiben will, dann wende ich die Funktion an, die die jeweilige Datenbankerweiterung bereitstellt, um eine Zeichenkette zu kodieren. Bei MySQL ist das z.B. mysql_escape_string. Diese verhält sich zufälligerweise identisch zu addslashes; bei anderen Datenbanken wie z.B. Oracle muss man jedoch " anders schützen und deswegen gibt es da andere Funktionen. Damit kann ich sicher sein, dass die Zeichenkette mir nicht mehr in die Abfrage hineinpfuscht.
Mein Verfahren hat den Nachteil, dass ich im Zweifel die Zeichenkette zweimal konvertiere, allerdings habe ich so die absolute Kontrolle über das, was in der Zeichenkette drin steht.
Noch ein Tipp: Wenn Du _sowieso_ mit addslashes/stripslashes arbeitest, solltest Du _dringenst_ magic_quotes_runtime deaktivieren (falls aktiv; kann man per Funktion am Anfang des Scripts einstellen), damit Dir dieses Feature nicht ins Handwerk pfuscht; egal, ob Du nun meinen Rat mit dem im schlimmsten Fall zweimal konvertieren annimmst, oder nicht.
Viele Grüße,
Christian