Sonderzeichen + PHP

Dieses Thema im Forum "Web-Programmierung" wurde erstellt von Premox, 20.11.2005.

  1. Premox

    Premox Thread Starter MacUser Mitglied

    Beiträge:
    39
    Zustimmungen:
    0
    MacUser seit:
    07.03.2005
    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!
     
  2. moses_78

    moses_78 MacUser Mitglied

    Beiträge:
    1.322
    Zustimmungen:
    22
    MacUser seit:
    08.04.2005
    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: 20.11.2005
  3. Premox

    Premox Thread Starter MacUser Mitglied

    Beiträge:
    39
    Zustimmungen:
    0
    MacUser seit:
    07.03.2005
    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.
     
  4. Jakob

    Jakob MacUser Mitglied

    Beiträge:
    1.067
    Zustimmungen:
    21
    MacUser seit:
    05.01.2004
    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: 20.11.2005
  5. dms

    dms Gast

    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. :)
     
  6. Jakob

    Jakob MacUser Mitglied

    Beiträge:
    1.067
    Zustimmungen:
    21
    MacUser seit:
    05.01.2004
    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.
     
  7. Premox

    Premox Thread Starter MacUser Mitglied

    Beiträge:
    39
    Zustimmungen:
    0
    MacUser seit:
    07.03.2005
    Danke für die Tipps, habe im PHP-Manual gelesen, das durch Post, Get oder Cookie weitergegebene Daten automatisch escaped werden. Bitte schließen
     
  8. dms

    dms Gast

    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?
     
Die Seite wird geladen...