Sagen wir mal ich habs so halb verstanden :)
Das Ende ist mir etwas zu hoch.Was ich allerdings überhaupt nicht verstehe: am Ende des Skripts wird set_magic_quotes_runtime(1); ausgeführt. Damit werden die magic quotes doch wieder aktiviert, wozu brauche ich also so ein Skript?
Hi Obelix,
das geht nun wirklich fast nur noch mit Bildchen.
Stell Dir einfach vor, du solltest den String
Er sagte:"ich versteh das nicht".
in die Datenbank speichern.
Dann musst Du doch $gesagt mit
$gesagt="Er sagte:"ich versteh das nicht"."
an die Datenbank übergeben.
in der Datenbank steht nun im Feld GESAGT
45 72 20 73 61 67 74 65 3A 22 69 63 68 20 ....
E R s a g t e : " i c h v e r
Das bedeutet, dass der Backslash vor dem Häkchen gar nicht mit in die DB übernommen wird. Wieso denn auch? In der DB stehen die Zeichen als ASCII-Code (oder welcher für die DB zuständig ist) codiert eingetragen. Die "Demaskierung" findet allerdings noch in der API zur Datenbank statt. Übergibt man die Werte mit einem Systemaufruf (Interrupt), dürfen im Datenpuffer keine Maskierungen mehr stehen.
Nur die Programmiersprache C (und damit auch Perl und PHP und...) mischen Zeichenstrom und Anweisungen. Pascal z.B. kennt nur eine einzige Anweisung bei Strings -> " Das Häkchen. Wenn man also ein Häkchen schreiben will, muss man "" zwei direkt hintereinander schreiben.
Wenn Du jetzt die Daten aus der DB wieder rausholst und Magic_Quotes_Runtime ist eingeschaltet, dann werden nach dem SELECT die Maskierungen wieder gesetzt.
Da Du die Maskierungen aber selber vornehmen wirst, solltest Du dieses Feature auch ausschalten.
In Deinen Strings stehen dann nur reine Werte.
Die MQ_RT Sache schaue ich mir aber selber nochnmal genauer an. Leider sieht man ja nicht, an welcher Stelle welche Verbiegungen stattfinden.
Grüße
Tom