Waldfeeeeeee: \" durch " ersetzen

Hallo!

Mich plagt folgendes Problem:

Ich habe $x Textareas, und in manchen dieser Textareas sind auch Anführungszeichen. Wenn ich nun mit der POST-Methode jede Textarea zu einem Element des Post-Arrays mache (also $_POST[$x]) werden die " aber zu " ... Ich möchte nun, dass die " durch ein " ersetzt werden.

Habe es versucht so zu lösen:

$ersetzt = ereg_replace('"','"',$_POST[$b]);

Aber so funktioniert es nicht! Das " wird zwar zu ", aber das \ bleibt da! Was mache ich falsch? :(

Gruß

  1. Sry, habe das direkt aus meiner datei kopiert, deshalb steht da $b statt $x in den eckigen klammern ..
    Aber in meiner datei funkt es auch nicht, und da sind alle als $b definiert!

  2. Hallo

    Hallo!

    Mich plagt folgendes Problem:

    Ich habe $x Textareas, und in manchen dieser Textareas sind auch Anführungszeichen. Wenn ich nun mit der POST-Methode jede Textarea zu einem Element des Post-Arrays mache (also $_POST[$x]) werden die " aber zu " ... Ich möchte nun, dass die " durch ein " ersetzt werden.

    Habe es versucht so zu lösen:

    $ersetzt = ereg_replace('"','"',$_POST[$b]);

    Aber so funktioniert es nicht! Das " wird zwar zu ", aber das \ bleibt da! Was mache ich falsch? :(

    Der backslash wird automatisch vor die Anführungszeichen (und auch einige andere zeichen) gesetzt, um sie zu maskieren, da sie eigentlich als Stringbegrenzer fungieren.

    Mit stripslashes() entfernt man diese Maskierungen und mit htmlspecialchars() kannst du dir, unter Anderem auch, die Anführungszeichen HTML-gerecht maskieren lassen.

    stripslashes
    htmlspecialchars

    Tschö, Auge

    --
    Die Musik drückt aus, was nicht gesagt werden kann und worüber es unmöglich ist zu schweigen.
    (Victor Hugo)
    Veranstaltungsdatenbank Vdb 0.1
  3. Hallo Waldfeeeeeee,

    Ich habe $x Textareas, und in manchen dieser Textareas sind auch Anführungszeichen. Wenn ich nun mit der POST-Methode jede Textarea zu einem Element des Post-Arrays mache (also $_POST[$x]) werden die " aber zu " ...

    Vermutlich stehen in der php.ini die magic_quotes_gpc auf on/true. Wenn Du Einfluss auf die php.ini hast, setze diese auf false.

    $ersetzt = ereg_replace('"','"',$_POST[$b]);

    Probiere mal '\"'. Der Slash schützt Dein doppeltes Hochkomma, auch wenn es hier eigenlich nicht nötig ist.

    Gruß
    Olaf

    P.S.: Ach ja, statt ereg_replace lieber preg_replace: Ist performanter und die ereg-Funktionen fliegen vielleicht bei PHP6 raus.

    1. echo $begrüßung;

      [...] die ereg-Funktionen fliegen vielleicht bei PHP6 raus.

      . Sie werden nur eine ausschaltbare Extension, wie beispielsweise mysql. Es gibt keinen Grund, sie komplett zu verbannen.

      echo "$verabschiedung $name";

      1. Hallo,

        [...] die ereg-Funktionen fliegen vielleicht bei PHP6 raus.

        . Sie werden nur eine ausschaltbare Extension, wie beispielsweise mysql. Es gibt keinen Grund, sie komplett zu verbannen.

        OK, das war ein bisschen auf die Schnelle formuliert. Aber abgesehen davon kenne ich eh keinen Grund, die ereg-Funktionen zu benutzen. Wer unbedingt will, kann sie als Extension laden, die meisten werden sie IMHO nicht benutzen.

        Aber warten wir mal gespannt ab, was PHP6 _wirklich_ bringen wird.

        Gruß
        Olaf

        1. echo $begrüßung;

          Aber warten wir mal gespannt ab, was PHP6 _wirklich_ bringen wird.

          Entspann dich! :-)

          echo "$verabschiedung $name";

        2. Hallo Olaf,

          OK, das war ein bisschen auf die Schnelle formuliert. Aber abgesehen davon kenne ich eh keinen Grund, die ereg-Funktionen zu benutzen. Wer unbedingt will, kann sie als Extension laden, die meisten werden sie IMHO nicht benutzen.

          Die mangelnde Binärsicherheit kann sogar zu Sicherheitslücken führen. Stell Dir vor, Du wendest per ereg() (oder eregi()) einen regulären Ausdruck auf eine Benutzereingabe an. Die ereg-Bibliothek denkt, der String wäre zu Ende, sobald ein 0-Byte auftaucht. Wenn der übergebene String also ein 0-Byte enthält, davor jedoch komplett harmlos ist, danach jedoch irgendwelche Böse sachen enthält, dann gibt ereg() true zurück (String matcht), obwohl der String eigentlich böse ist, und das Script könnte unter Umständen (je nachdem, wie dann mit der Eingabevariable weiter verfahren wird) Dinge tun, die es nicht tun sollte. preg_match() dagegen lässt sich von einem 0-Byte nicht täuschen (da die pcre-Bibliothek nicht nur den String selbst, sondern auch dessen Länge übergeben bekommt) und würde bei einer Eingabe mit 0-Byte sofort sagen, dass die Eingabe ungültig ist (außer der reguläre Ausdruck erlaubt das 0-Byte an der Stelle selbstverständlich).

          Zugegebenermaßen, der Angriff mag jetzt etwas konstruiert klingen, aber ich kann mir durchaus vorstellen, dass sowas in ungünstigen Situationen durchaus auftreten kann. Deswegen ist von den ereg*-Funktionen eigentlich nur abzuraten. Zudem sind preg* sowieso schneller und können mehr.

          Viele Grüße,
          Christian

          --
          "I have always wished for my computer to be as easy to use as my telephone; my wish has come true because I can no longer figure out how to use my telephone." - Bjarne Stroustrup
  4. Hi,

    Ich möchte nun, dass die " durch ein " ersetzt werden.

    warum?
    deaktiviere wie gesagt magic_quotes oder entferne die Maskierung, aber wofür willst Du eine Entity verwenden?

    freundliche Grüße
    Ingo