bei mir schleichen sich oft in Strings massenweise Backslashes vor Anführungszeichen ein.
Diese muss ich nun irgendwie beseitigen, wofür ich mir schon eine Funkrion geschrieben habe:
wie man schon sieht, wollte ich mit preg_replace und str_replace erreichen, das freistehende Backslashes (also welche, die als solche gemeint sind, und eben nicht eine Ansammlung vor einem Anführungszeichen) erhalten bleiben. Leider funktioniert es so noch nicht, vermutlich liegts an meinen REGEX-Kenntnissen…
Zudem würde ich anstelle von for lieber eine Überprüfung auf diese -Ansammlungen vornehemen (preg_match), und while verwenden.
hat bisher aber auch nicht so geklappt, wie ich will.
stripslashes mehrfach hintereinander aufzurufen, erscheint mir wenig sinnvoll - du kannst überhaupt nicht sagen, wie die Daten korrekt aussehen, also weisst du auch nicht, wie oft Backslashes zu entfernen wären.
magic_quotes_gpc generell zu deaktivieren, ist auf dem eigenen Space das vernünftigste.
Wenn man den Space nicht hinreichend konfigurieren kann, bzw. das Script für die “Eventualität” wappnen will - dann jedes Mal, wenn Daten neu herinkommen, ein Mal nach Prüfung darauf, ob die Option aktiviert ist, die “falschen” Backslashes entfernen - und nicht warten, bis sich über mehrere Zyklen eine nicht mehr beurteilbare Anzahl davon angesammelt hat.
OK, ich beschreibe noch mal, was ich jetzt erreichen möchte:
Die for-schliefe gefällt mir als soclhe auch nicht. Mir wäre ein Code wie dieser lieber, stellt sich nur die Frage nach dem ensprechenden Regex:
Ein Backslash, der nicht vor einem Ausrüfezeichen steht, also als solches gemeint ist, soll bleiben. Dazu wollte ich mit preg_replace einen solchen Backslash erkennen, und durch die Zeichenfolge “[ASCIIBACK]” kenntlichen machen, die Zeichenfolge wird später mit str_replace() wieder zu einem Backslash verwandelt.
Ungefähr klar, was ich meine?
Welche Nachteile habe ich (was muss ich beachten!), wenn ich magic_quotes_gpc ausschalte?
Eigentlich nichts - wenn du vernünftig geschriebene Scripte einsetzt.
magic_quotes_gpc war eine blöde Idee, um allzu unbedarfte Scripter vor sich selber zu schützen - die beispielsweise die notwendige Behandlung von Daten vor dem Einfügen in eine SQL-Query vergessen.
Dass diese Option mehr schadet, als sie nutzt, haben die PHP-ler inzwischen auch erkannt - deshalb ist sie per Default schon seit längeren auf off gestellt, und wird auch mit PHP 6 komplett entfallen.
wenn ein user in einem Formular, in einem Textfeld z.b. folgendenen gemischten Text eingibt:
und magic_quotes sind aktiviert, dann fügt php die extra backslashes dorthin wo sie nötig sind. Auch vor den normalen Backslashes. Daraus wird also sowas:
stripslashes macht jetzt genau das was erwartet wird. die Doppelten Backslashes werden zu einfachen. Die Verwendung von Stripslashes würde den Text aus der GET/POST variable also wieder in den originalen Ursprung zurückversetzen:
Es gibt also gar keinen Grund irgendwelche komplexen regex zu verwenden.
Und wie bereits gesagt, sollte man vor der Verwendung von Stripslashes einfachmal abfragen, ob magic_quotes aktiviert sind, wenn nicht, ist stripslashes ja nicht nötig.
in meinem ersten Post habe ich dir einen Link zur Funktion get_magic_quotest_gpc gepostet, dort wird eigentlich alles beantwortet, was jetzt in etlichen Posts noch einmal nachgeholt wurde! Alles weitere hätte wohl Google besorgt!
Hallo Balmung,
du hast schon Recht was das angeht. Jedoch habe ich ihn so verstanden, dass es sich nicht nur um 2 oder 3 \ handelt, sondern dass es auch einige mehr sein können! Das habe ich aber auch schon in einem Post geschrieben und dabei auf die Funktionsweise von stripslashes() hingewiesen und ich mag mich nicht noch einmal wiederholen!
Ja, steht auch alles im Manual!
[quote=„asipak4you“]du solltest die Ursache bekämpfen und das dürfte magic_quotes_gpc sein!
Das geht jetzt soweit klar, poloz hat sich durch ausgeben und wiederabsenden in einem Formular jetzt oft eine ganze Reihe von Backslashes eingeschlichen, mit sowas habe ich nämlich nicht gerechnet, bin da also wieder um was schlauer geworden.
Daher ist es nötig, das ich Stripslashes nun mehrmals ausführe, und ich wäre dankbar, wenn mir jetzt irgendjemand einen Tipp geben kann, wie ich ein REGEX hinkrige, das mir sagt, ob alle Backslashes weg sind!
Woher das kommt und die Funktionsweise von stripslashes ist mir vollkommen klar, ich will da einfach nur diese nervenden Backslashes wegkriegen, ohne eine Schleife 98mal unnötig laufn zu lassen!
so, ich habe mich jetzt mal wieder an das Projekt drangesetzt, und deinen RegEx eingebaut.
Leider tat sich da garnischt mehr.
Ich bin also weiterhin auf der Suche nach einer besseren Version meiner Funktion.