Probleme mit Escape-Zeichen in Formularen
Onkel Schnitzel
- php
Hallo Leute,
ich übertrage Daten von Formular A in Formular B und wieder zurück. Dabei macht mich das Verhalten des Escape-Zeichens irgendwie stutzig. Mal ein paar Beispiele:
Eintrag Text-Feld Formular A: "TEST" ->
hidden-Feld Formular B: "TEST" ->
ausgefülltes Text-Feld Formular A: \
Formular A: 'TEST' ->
hidden Formular B: 'TEST' ->
Formular A: 'TEST'
Es zeigt sich also z.B. bei doppelten und einfachen Anführungszeichen ein unterschiedliches Verhalten. Ich hab schon alle möglichen Varianten mit stripslashes und htmlspecialchars durchprobiert, aber nie kommt in Formular A das gewünschte Ergebnis an. Sobald ich in Formular A z.B. doppelte Anführungszeichen benutze, kommt nach dem ersten Anführungszeichen nur noch das Escapezeichen und danach nichts mehr.
Ich behandle meine Einträge aus Formular A mit der folgenden Funktion :
function array_stripslashes(&$var) {
if(is_string($var)) {
$var = stripslashes($var);
}
else {
if(is_array($var)) {
foreach($var AS $key => $value) {
array_stripslashes($var[$key]);
}
}
}
}
if(get_magic_quotes_gpc()) {
array_stripslashes($_REQUEST);
}
Formular A ruft sich immer wieder selbst auf. Und obige Funktion hat sich bislang gut dafür bewährt (magic_quotes sind bei mir auf On). Wenn ich da beispielsweise "TEST" eingebe und abschicke, erscheint auch immer wieder "TEST". Aber wenn ich nun meine Daten an Formular B schicke und dann wieder zurück, tritt halt dieses "merkwürdige" Verhalten auf.
Wie gesagt, nun schon seit drei Stunden alle möglichen Kombinationen ausprobiert, auch die Funktion oben in Formular B eingefügt und angepasst bzw. aus Formular A entfernt, das Problem bleibt.
Ihr bestimmt nen Denkanstoß für mich :-)
Danke schonmal,
Onkel Schnitzel
Hast du schon probiert, auf das Anzeigefeld in Formular A einen
str_replace('\','',$_REQUEST('feld');
zu setzen?
Hast du schon probiert, auf das Anzeigefeld in Formular A einen
str_replace('\','',$_REQUEST('feld');
zu setzen?
Hallo Klaus,
nein, hab ich (noch) nicht. Ich bin eher noch auf der Suche nach der Ursache (siehe oben).
Gruß,
Onkel Schnitzel
echo $begrüßung;
ich übertrage Daten von Formular A in Formular B und wieder zurück. Dabei macht mich das Verhalten des Escape-Zeichens irgendwie stutzig. Mal ein paar Beispiele:
Du hast ein Problem mit den Magic Quotes. Das ist für Datenbankeingaben gedacht, wirkt aber an der völlig falschen Stelle (bei der Übergabe von Formular-Daten an ein Script), und steht dir im Weg. Versuche es auszuschalten. Das Escaping darf erst dann stattfinden, wenn du Daten in ein SQL-Statement einfügen willst. Und dort sollte es mit einer zum DBMS passenden Funktion erfolgen, z.B. mysql_real_escape_string() für MySQL.
Auch musst du bei Daten, die du in HTML ausgeben willst, ebenfalls beachten, dass einige Zeichen eine besondere Bedeutung haben. Die kann man mit htmlspecialchars() entschärfen.
echo "$verabschiedung $name";
Du hast ein Problem mit den Magic Quotes. Das ist für Datenbankeingaben gedacht, wirkt aber an der völlig falschen Stelle (bei der Übergabe von Formular-Daten an ein Script), und steht dir im Weg. Versuche es auszuschalten.
Hallo dedlfix,
ich hab jetzt die magic_quotes lokal mal auf Off gestellt. Wenn ich in Formular A jetzt "TEST" abschicke, kommt in Formular B "TEST" an und auf dem Rückweg in Formular A gar nichts mehr. Schicke ich 'TEST' ab, kommt auch 'TEST' zurück. Könnte es sein, dass das eigentliche Problem noch woanders liegt, nicht bei den magic quotes? Denn einfache und doppelte Anführungszeichen werden doch gleichermaßen escaped, oder? Vielleicht liegt es ja irgendwie am value-Attribut, vielleicht kommt er da mit den Anfhrungszeichen durcheinander. Hm...
Gruß,
Onkel Schnitzel
Vielleicht liegt es ja irgendwie am value-Attribut, vielleicht kommt er da mit den Anfhrungszeichen durcheinander. Hm...
Naja, hab ich mir ja fast selbst beantwortet. Wenn ich den Inhalt mit htmlspecialchars() behandle, steht da auch "TEST". Das Problem ist jetzt nur, dass ich im Netz keinen Einfluß auf die php.ini habe. Ich muss also irgendwie mit magic_quotes On klarkommen.
Gruß,
Onkel Schnitzel
echo $begrüßung;
Das Problem ist jetzt nur, dass ich im Netz keinen Einfluß auf die php.ini habe. Ich muss also irgendwie mit magic_quotes On klarkommen.
Deswegen ist auf der Seite Disabling Magic Quotes ist ein kurzes Codestück zu finden, das, einmalig am Scriptanfang eingebunden, sich auch um die ordentliche Entsorgung der Magic Quotes kümmert (solange sie nicht im Key stecken).
echo "$verabschiedung $name";
Deswegen ist auf der Seite Disabling Magic Quotes ist ein kurzes Codestück zu finden, das, einmalig am Scriptanfang eingebunden, sich auch um die ordentliche Entsorgung der Magic Quotes kümmert (solange sie nicht im Key stecken).
Aah, alles klar, hatte ich übersehen. Jetzt sieht das schon besser aus.
Danke,
Onkel Schnitzel