htmlspecialchars($string) verursacht Backslash!
Stefan
- php
0 Henryk Plötz0 Sven Rautenberg0 Stefan0 Sönke Tesch
Hi!
Ich verwende die Funktion htmlspecialchars in der Art:
<? echo htmlspecialchars($String ) ?>
Wenn ich z.B " Das sind "Hochkommas"! " als String übergebe, erhalte ich: Das sind "Hochkommas"!
Was nun?
Ich möchte keine Backslashes :(
Danke, Stefan
Moin,
Wenn ich z.B " Das sind "Hochkommas"! " als String übergebe, erhalte ich: Das sind "Hochkommas"!
Herzlichen Glückwunsch, Du hast grade die Magic Quotes entdeckt, ein Feature welches unsicheres Programmieren etwas schwieriger machen soll. Du kannst sie entweder abschalten (blöde Idee) oder die Backslashes einfach mit stripslashes() entfernen. Mehr dazu findest du in der PHP-Doku.
--
Henryk Plötz
Grüße aus Berlin
Moin!
Ich verwende die Funktion htmlspecialchars in der Art:
<? echo htmlspecialchars($String ) ?>
Wenn ich z.B " Das sind "Hochkommas"! " als String übergebe, erhalte ich: Das sind "Hochkommas"!
Was nun?
Ich möchte keine Backslashes :(
Sicher, dass der String vorher keine Backslashes hat? Wo kommt der überhaupt her? Üblicherweise handelt man sich die Backslashes dann ein, wenn man Stringdaten per GET oder POST übermittelt bekommt. Das ist im Prinzip gut, denn meist speichert man die Daten ja dann in einer Datenbank ab - und so wird effektiv verhindert, dass man sich die Datenbank zerlegt.
In jedem Fall: stripslashes() ist die Funktion deiner Wahl. Ich würde sie grundsätzlich vor htmlspecialchars() anwenden.
- Sven Rautenberg
Moin!
Ich verwende die Funktion htmlspecialchars in der Art:
<? echo htmlspecialchars($String ) ?>
Wenn ich z.B " Das sind "Hochkommas"! " als String übergebe, erhalte ich: Das sind "Hochkommas"!
Was nun?
Ich möchte keine Backslashes :(
Sicher, dass der String vorher keine Backslashes hat? Wo kommt der überhaupt her? Üblicherweise handelt man sich die Backslashes dann ein, wenn man Stringdaten per GET oder POST übermittelt bekommt. Das ist im Prinzip gut, denn meist speichert man die Daten ja dann in einer Datenbank ab - und so wird effektiv verhindert, dass man sich die Datenbank zerlegt.
In jedem Fall: stripslashes() ist die Funktion deiner Wahl. Ich würde sie grundsätzlich vor htmlspecialchars() anwenden.
- Sven Rautenberg
Hi!
Tatsächlich hab ich eben festgestellt, das die Backslashes auch ohne die Funktion htmlspecialchars(...) erscheinen... .
Danke für den Hinweis!!
Ich werde nun stripslashes() anwenden, aber was ist dann bei "gewollten" Backslashs?
Grüße, Stefan
Moin!
Tatsächlich hab ich eben festgestellt, das die Backslashes auch ohne die Funktion htmlspecialchars(...) erscheinen... .
Danke für den Hinweis!!
Ich werde nun stripslashes() anwenden, aber was ist dann bei "gewollten" Backslashs?
Gib einfach mal einen Backslash ein - er wird als \ erscheinen, was stripslashes zurück zu \ korrigiert.
- Sven Rautenberg
Moin!
Tatsächlich hab ich eben festgestellt, das die Backslashes auch ohne die Funktion htmlspecialchars(...) erscheinen... .
Danke für den Hinweis!!
Ich werde nun stripslashes() anwenden, aber was ist dann bei "gewollten" Backslashs?
Gib einfach mal einen Backslash ein - er wird als \ erscheinen, was stripslashes zurück zu \ korrigiert.
- Sven Rautenberg
Stimmt, habs eben getestet, es funktioniert.
Danke!!
Grüße, Stefan
Ich möchte keine Backslashes :(
Sicher, dass der String vorher keine Backslashes hat? Wo kommt der überhaupt her? Üblicherweise handelt man sich die Backslashes dann ein, wenn man Stringdaten per GET oder POST übermittelt bekommt. Das ist im Prinzip gut,
Das ist genauso "gut", wie die Idee "gut" ist, daß zum Beispiel der IE die Content-Type-Angabe nicht wirklich beachtet. Oder andere "smarte" Techniken aus dem Hause Microsoft.
In jedem Fall: stripslashes() ist die Funktion deiner Wahl. Ich würde sie grundsätzlich vor htmlspecialchars() anwenden.
Da wage ich mal zu hinterfragen, wo denn bitte der Vorteil von unerwartet auftauchenden Zusatzzeichen und dem daraus resultierenden, pauschalen stripslashes()-Einsatz an jeder Ecke gegenüber dem gezielten Einsatz von beispielsweise mysql_escape_string() dort, wo man es braucht, sein soll?
Wenn das so ein doller Vorteil wäre, könnte man auch gleich hingehen und htmlentites()/htmlspecialchars() abschaffen - ohne diese beiden Funktionen kann man sich schließlich auch ganz unangenehm die Seite zerschießen, also warum sollte PHP das nicht auch automatisch machen..
Ich für meinen Teil finde diese Bevormundung, die man alle Nase lang wieder rückgängig machen muß, jedenfalls äußerst störend und dementsprechend das Abschalten alles andere als "blöd" (wie Henryk meinte).
Gruß,
soenk.e