Sonderzeichen + PHP

P

Premox

Mitglied
Thread Starter
Dabei seit
07.03.2005
Beiträge
40
Reaktionspunkte
0
Hallo,

habe ein Problem mit PHP. Und zwar hab ich ein Script geschrieben, das eine Usereingabe auswertet. Jetzt hat ein User einen Text in dem ein einfaches Anführungszeichen (') und ein Dollar-Zeichen vorkommt. Wenn ich den String also mit " starte, wird der Text nach dem Dollarzeichen nicht angezeigt. Wenn ich ihn mit ' starte, gibts ne Fehlermeldung, da der String ja am zweiten, im Text enthaltenen ' aufhört.

Gibts eine Funktion, um das zu umgehen?

Danke im voraus!
 
versuchs mal so:
PHP:
 echo "Hallo ".$variable.", schön dich zu sehen";

die schreibweise echo "sjfhhsdj $kk"; oder echo 'dfdfd $fff'; ist afaik eh
unsauber, da php je nach version diesen befehl unterschiedlich interpretiert ;)

edit: ach ja, und wenn du einfach so dollarzeichen in einen string einbauen
willst, solltest du ihn mit einem backslash escapen.
 
Zuletzt bearbeitet:
Hab mich vllt unklar ausgedrückt:

Der User kopiert eine Tabelle und fügt diese in ein Textfeld ein, dort wird sie mit explode() auseinandergenommen und in eine DB eingetragen. Wenn jetzt in der Tabelle, was durchaus möglich ist, ein ' oder $ vorkommt, gibts nen Fehler bzw wird die Tabelle nicht vollständing. Ich kann da nichts ändern, das muss alles automatisch passieren, also das escapen von ' und $. Leider kenn ich da keine Funktion zu.
 
Hi,

die Funktion nennt sich htmlspecialchars().

Der Unterschied zwischen echo "text" und echo 'text' ist, dass Text in einfachen Anführungszeichen nur Text (keine Variablen, \n usw.) enthalten darf, mit doppelten Anführungszeichen schon. Deshalb sind einfache ein Stück schneller, da PHP den Inhalt nicht noch mal auf Variablen hin durchsuchen muss.

Wie Moses schon sagte, ist die beste Form: echo 'text'.$variable.'text'; (einfache Anführungszeichen, dann hast Du auch kein Prob mit $-Zeichen mehr.)
 
Zuletzt bearbeitet:
htmlspecialchars() würde das Problem mit den ' zwar lösen, möglicherweise jedoch neue schaffen. Mit SQL gibts dann zwar keine Probleme, jedoch werden ja absolut alle HTML-Sonderzeichen umgewandelt, was vielleicht garnicht gewünscht ist.

Die, meiner Meinung nach, bessere Lösung ist folgendes:

magic_quotes_gpc in der php.ini auf true setzen. Das escaped automatisch alle Quotes( ' und ").

Falls man an die php.ini nicht ran kommt oder mag, gibts folgende Möglichkeit:

$_POST['variable'] = (get_magic_quotes_gpc()) ? $_POST['variable'] : addslashes($_POST['variable']);

Kannst Du auch in einer Schleife durchlaufen und alle übermittelten Werte in einem Rutsch bearbeiten.

Eine Lösung für die Möchtegern-Variablen haben moses_78 und Jakob ja schon vorgeschlagen. Ich kann das Problem allerdings nicht ganz nachvollziehen. Vom Nutzer übermittelte Texte sollten von PHP eigentlich nicht geparst werden. Evtl. gibts da eine mir unbekannte php.ini-Einstellung die das aktiviert.
Wenn das Problem anders nicht zu lösen ist könntest Du versuchen den String nochmal durch die Funktion quotemeta() zu jagen. Von der Theorie her dürfte es jedoch nicht viel bringen, da der String schon nicht mehr das $ enthält...teste einfach mal. :)
 
Ich sehe gerade, dass es ja um den DB-Eintrag geht und nicht um die Ausgabe mit PHP.

Dann ist dms' Lösung klar besser. Man sollte ja keine umgewandelten Zeichen in die DB schreiben. Meine Lösung war für die Ausgabe, und ist vielleicht dann immer noch nützlich.
 
Danke für die Tipps, habe im PHP-Manual gelesen, das durch Post, Get oder Cookie weitergegebene Daten automatisch escaped werden. Bitte schließen
 
Aber eben nur wenn die Maqic Quotes in der php.ini "Ja" sagen. Wäre der Wert bei Dir auf true, hättest Du ja das Problem nicht gehabt, oder sehe ich da fwas falsch?
 
Zurück
Oben Unten