Andi: Ausgabe String

Hallo,

ich darf mal wieder einen Fehler beheben der tief im System hängt:
Wir lesen Text aus der DB und maskieren sie dann generell mit addslashes?!?
Nun zum Problem:
Die Slashes werden für die Javascript aufrufe gebraucht um den String
in einem Alert richtig auszugeben und nicht die Quotes zu schließen.
Nun wird dieser Text nicht nur in Alert-Befehlen benutzt sondern auch im normalen HTML.

Beispiel(symbolisch):

// Gerade aus der DB gelesen
$text = "Ich bin ein text mit dem ital. Wort für Baum: l'albero";
// Obligatorisch für alle
$text = addslashes($text);

// Ausgabe
alert('$text');
echo $text;

Nun wird l'albero im Alert richtig ausgegeben aber nicht für das HTML.

Habe ich da eine Möglichkeit das irgendwie auszubügeln ohne, dass ich den ganzen Code durchforsten muss?

Freundliche Grüße
Andi

  1. hi,

    ich darf mal wieder einen Fehler beheben der tief im System hängt:
    Wir lesen Text aus der DB und maskieren sie dann generell mit addslashes?!?

    Wieso?

    Die Slashes werden für die Javascript aufrufe gebraucht um den String
    in einem Alert richtig auszugeben und nicht die Quotes zu schließen.
    Nun wird dieser Text nicht nur in Alert-Befehlen benutzt sondern auch im normalen HTML.

    Daten sollten immer passend für den Kontext, in den sie gebracht werden, maskiert werden - zu dem Zeitpunkt, wo sie in diesen Kontext gebracht werden.

    // Gerade aus der DB gelesen
    $text = "Ich bin ein text mit dem ital. Wort für Baum: l'albero";
    // Obligatorisch für alle
    $text = addslashes($text);

    // Ausgabe
    alert('$text');
    echo $text;

    Nun wird l'albero im Alert richtig ausgegeben aber nicht für das HTML.

    Habe ich da eine Möglichkeit das irgendwie auszubügeln ohne, dass ich den ganzen Code durchforsten muss?

    Wenn du - wie ich auf Grund der Fragestellung jetzt mal vermute - kein Interesse daran hast, die Fehler in der _Logik_ dieser Applikation auszubügeln - dann im allergrößten Notfall, in dem du bevor du die Daten als HTML ausgibst, diese Maskierung rückgängig machst, und direkt danach, falls sie anschliessend noch mal in einem Javascript-Kontext gebraucht werden, wieder hinzufügst.

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. hi,

      dann im allergrößten Notfall, in dem du bevor du die Daten als HTML ausgibst, diese Maskierung rückgängig machst, und direkt danach, falls sie anschliessend noch mal in einem Javascript-Kontext gebraucht werden, wieder hinzufügst.

      Bzw. natürlich, in dem du sie nur für die HTML-Ausgabe entfernst, ohne den "Original"-Wert zu verändern - also das, was eigentlich bei sauberem Aufbau schon von vornherein hätte gemacht werden sollen, nur umgekehrt.

      gruß,
      wahsaga

      --
      /voodoo.css:
      #GeorgeWBush { position:absolute; bottom:-6ft; }
    2. hi,

      ich darf mal wieder einen Fehler beheben der tief im System hängt:
      Wir lesen Text aus der DB und maskieren sie dann generell mit addslashes?!?

      Wieso?

      Dito

      Die Slashes werden für die Javascript aufrufe gebraucht um den String
      in einem Alert richtig auszugeben und nicht die Quotes zu schließen.
      Nun wird dieser Text nicht nur in Alert-Befehlen benutzt sondern auch im normalen HTML.

      Daten sollten immer passend für den Kontext, in den sie gebracht werden, maskiert werden - zu dem Zeitpunkt, wo sie in diesen Kontext gebracht werden.

      Dito

      // Gerade aus der DB gelesen
      $text = "Ich bin ein text mit dem ital. Wort für Baum: l'albero";
      // Obligatorisch für alle
      $text = addslashes($text);

      // Ausgabe
      alert('$text');
      echo $text;

      Nun wird l'albero im Alert richtig ausgegeben aber nicht für das HTML.

      Habe ich da eine Möglichkeit das irgendwie auszubügeln ohne, dass ich den ganzen Code durchforsten muss?

      Wenn du - wie ich auf Grund der Fragestellung jetzt mal vermute - kein Interesse daran hast, die Fehler in der _Logik_ dieser Applikation auszubügeln - dann im allergrößten Notfall, in dem du bevor du die Daten als HTML ausgibst, diese Maskierung rückgängig machst, und direkt danach, falls sie anschliessend noch mal in einem Javascript-Kontext gebraucht werden, wieder hinzufügst.

      Dann tritt das ein was ich befürchtet habe ;( Den ganzen Code mit ner Regex wieder so hinbiegen wie er eigentlich sein sollte von vornherein

      Freundlicher Gruß
      Andi

      1. hi,

        Wieso?

        Dito

        Ich habe dir eine Frage gestellt - also was soll das blöde "Dito"?

        Daten sollten immer passend für den Kontext, in den sie gebracht werden, maskiert werden - zu dem Zeitpunkt, wo sie in diesen Kontext gebracht werden.

        Dito

        Ich habe dir gesagt, wie man's vernünftig macht - also was soll das blöde "Dito"?

        Dann tritt das ein was ich befürchtet habe ;( Den ganzen Code mit ner Regex wieder so hinbiegen wie er eigentlich sein sollte von vornherein

        Wieso Regex?

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
        1. Hi,

          Wieso?

          Dito

          Ich habe dir eine Frage gestellt - also was soll das blöde "Dito"?

          Ja weil ich nicht weiß warum die damaligen Programmierer, dass so eingebaut haben. Also anstatt das ganze geleier da zu geben schreibe ich genau solche Antworten wie du im ganzen Forum.

          Daten sollten immer passend für den Kontext, in den sie gebracht werden, maskiert werden - zu dem Zeitpunkt, wo sie in diesen Kontext gebracht werden.

          Dito

          Ich habe dir gesagt, wie man's vernünftig macht - also was soll das blöde "Dito"?

          Ich würde das auch so machen bzw. hätte es so gemacht. Weiters sie obige Antwort.

          Dann tritt das ein was ich befürchtet habe ;( Den ganzen Code mit ner Regex wieder so hinbiegen wie er eigentlich sein sollte von vornherein

          Wieso Regex?

          Weil sonst kann ich ca. 1.000.000 Zeilen durchsuchen und das dort händisch ausbessern.

          Gruß
          Andi

          P.S. Ein bischen Freundlichkeit wäre schon angebracht wir sind hier nicht in einer Kneipe, wo man jeden gleich "blöd" anmacht.

          1. Moinsen

            Wieso Regex?

            Weil sonst kann ich ca. 1.000.000 Zeilen durchsuchen und das dort händisch ausbessern.

            Nochmal auch von mir: Und warum Regex?

            Sagt dir stripslashes() was?
            Sagt dir Suchen/Ersetzen was?

            Wenn du schon nicht den ganzen Aufbau eurer "Applikation" ändern möchtest: Wieviel dieser Alert()s gibt es? Einen? Dann brauchst du auch exakt nur eine Änderung vorzunehmen.

            Gruß,
            DL

          2. Hallo,

            wir sind hier nicht in einer Kneipe, wo man jeden gleich "blöd" anmacht.

            eben. Ich bin froh, dass der Umgangston hier in der Regel wesentlich angenehmer ist als in irgendeiner Kneipe. Ausnahmen bestätigen die Regel.

            Schönes Wochenende,
             Martin

            --
            Viele Fachleute vertreten die Ansicht, jedes Feature eines Programms, das sich nicht auf Wunsch abstellen lässt, sei ein Bug.
            Außer bei Microsoft. Da ist es umgekehrt.
  2. Hi,

    Du kannst den Text mit den Slashes in eine neue Variable speichern:

    // Gerade aus der DB gelesen
    $text = "Ich bin ein text mit dem ital. Wort für Baum: l'albero";
    // Obligatorisch für alle

    $maskedText = addslashes($text);

    // Ausgabe

    alert('$maskedText');
    echo $text;

    Habe ich da eine Möglichkeit das irgendwie auszubügeln ohne, dass ich den ganzen Code durchforsten muss?

    Du must wohl alle Stellen suchen, wo $text steht und gegebenenfalls "$text" durch "$maskedText" ersetzen.

    mfG,
    steckl

    1. Hallo,

      Habe ich da eine Möglichkeit das irgendwie auszubügeln ohne, dass ich den ganzen Code durchforsten muss?

      Du must wohl alle Stellen suchen, wo $text steht und gegebenenfalls "$text" durch "$maskedText" ersetzen.

      Genaus das möchte ich vermeiden ;)

      Grüße
      Andi