paco: Problem bei Verarbeitung eines varchars mit "&" im Namen

Hallo,
ich habe folgendes Problem:
Ich verarbeite Daten aus meiner mySQL-Datenbank, die in einem varchar-Feld stehen, mittels GET weiter. Also z.B.

$projekt = "Projekt 1";

<a href="verarbeitungsscript.php?projekt=Projekt 1&...">link</a>

Hat immer funktioniert bis ich mal ein Projekt mit einem Kaufmanns-Und im Namen angelegt habe.

$projekt = "Icke & Er"; -> Problem!!

Eintragen funktioniert, in der Datenbank heißt das Projekt richtig. Muß ich jeweils bei der Abfrage überprüfen, ob ein & vorkommt? Bzw welche Zeichen bereiten noch alle Probleme? Und muß ich die alle abfangen oder gibt es eine Funktion die das erledigt? Kann man die Zeichen in der Adresszeile irgendwie escapen?

dankeschön

Paco

  1. Hi paco!

    Kann man die Zeichen in der Adresszeile irgendwie escapen?

    Nein, man muss!
    Schau dir mal die Funktionen urlencode und urldecode an.

    MfG H☼psel

    --
    "It's amazing I won. I was running against peace, prosperity, and incumbency."
    George W. Bush speaking to Swedish Prime Minister unaware a live television camera was still rolling, June 14, 2001
    Selfcode: ie:% fl:( br:> va:) ls:& fo:) rl:? n4:& ss:| de:] js:| ch:? sh:( mo:) zu:)
    1. Moin!

      Kann man die Zeichen in der Adresszeile irgendwie escapen?
      Nein, man muss!
      Schau dir mal die Funktionen urlencode und urldecode an.

      Warum urldecode?

      - Sven Rautenberg

      1. Hi Sven!

        Schau dir mal die Funktionen urlencode und urldecode an.
        Warum urldecode?

        Um die Daten zu dekodieren? Was´n das für ´ne Frage?!

        MfG H☼psel

        --
        "It's amazing I won. I was running against peace, prosperity, and incumbency."
        George W. Bush speaking to Swedish Prime Minister unaware a live television camera was still rolling, June 14, 2001
        Selfcode: ie:% fl:( br:> va:) ls:& fo:) rl:? n4:& ss:| de:] js:| ch:? sh:( mo:) zu:)
        1. Hi!

          Schau dir mal die Funktionen urlencode und urldecode an.
          Warum urldecode?
          Um die Daten zu dekodieren? Was´n das für ´ne Frage?!

          Die Frage ist schon berechtigt. Wann genau brauchst du diese Funktion?

          Lo!

          1. Hi dedlfix!

            Schau dir mal die Funktionen urlencode und urldecode an.
            Warum urldecode?
            Um die Daten zu dekodieren? Was´n das für ´ne Frage?!
            Die Frage ist schon berechtigt. Wann genau brauchst du diese Funktion?

            Wenn die Daten aus dem Querystring weiterverarbeitet werden sollen, z. B. um sie in eine Datenbank zu speichern. Oder nicht?

            MfG H☼psel

            --
            "It's amazing I won. I was running against peace, prosperity, and incumbency."
            George W. Bush speaking to Swedish Prime Minister unaware a live television camera was still rolling, June 14, 2001
            Selfcode: ie:% fl:( br:> va:) ls:& fo:) rl:? n4:& ss:| de:] js:| ch:? sh:( mo:) zu:)
            1. Moin!

              Schau dir mal die Funktionen urlencode und urldecode an.
              Warum urldecode?
              Um die Daten zu dekodieren? Was´n das für ´ne Frage?!
              Die Frage ist schon berechtigt. Wann genau brauchst du diese Funktion?
              Wenn die Daten aus dem Querystring weiterverarbeitet werden sollen, z. B. um sie in eine Datenbank zu speichern. Oder nicht?

              Nein. Denn das erledigt PHP bereits für dich. Ansonsten müsstest du selbst manuell ständig urldecode() benutzen, auch wenn du Formulardaten aus GET-Formularen verarbeitest.

              - Sven Rautenberg

              1. Hi Sven!

                Warum urldecode?
                Um die Daten zu dekodieren? Was´n das für ´ne Frage?!
                Die Frage ist schon berechtigt. Wann genau brauchst du diese Funktion?
                Wenn die Daten aus dem Querystring weiterverarbeitet werden sollen, z. B. um sie in eine Datenbank zu speichern. Oder nicht?
                Nein. Denn das erledigt PHP bereits für dich. Ansonsten müsstest du selbst manuell ständig urldecode() benutzen, auch wenn du Formulardaten aus GET-Formularen verarbeitest.

                Danke für die Klarstellung und Entschuldigung für die ruppige Antwort.
                Ich bin in letzter Zeit sehr gestresst, was ziemlich starke Stimmungsschwankungen zur Folge hat.

                MfG H☼psel

                --
                "It's amazing I won. I was running against peace, prosperity, and incumbency."
                George W. Bush speaking to Swedish Prime Minister unaware a live television camera was still rolling, June 14, 2001
                Selfcode: ie:% fl:( br:> va:) ls:& fo:) rl:? n4:& ss:| de:] js:| ch:? sh:( mo:) zu:)
            2. Hi!

              Schau dir mal die Funktionen urlencode und urldecode an.
              Warum urldecode?
              Um die Daten zu dekodieren? Was´n das für ´ne Frage?!
              Die Frage ist schon berechtigt. Wann genau brauchst du diese Funktion?
              Wenn die Daten aus dem Querystring weiterverarbeitet werden sollen, z. B. um sie in eine Datenbank zu speichern. Oder nicht?

              Dazu musst du aber den Querystring ($_SERVER['QUERY_STRING']) selbst auswerten. PHP stellt dir die Daten im Array $_GET fertig dekodiert zur Verfügung.

              Lo!

  2. n'abend,

    Kann man die Zeichen in der Adresszeile irgendwie escapen?

    nicht nur können, sondern müssen.

    Dein Freund für Datem im Querystring (alles rechts vom Fragezeichen): urlencode(). Darüber hinaus möchtest du die URL dann noch HTML-sicher machen: htmlspecialchars()

    weiterhin schönen abend...

    --
    #selfhtml hat ein Forum?
    sh:( fo:# ch:# rl:| br:> n4:& ie:{ mo:} va:) de:] zu:} fl:( ss:? ls:[ js:|
    1. Hello,

      Kann man die Zeichen in der Adresszeile irgendwie escapen?

      nicht nur können, sondern müssen.

      Dein Freund für Datem im Querystring (alles rechts vom Fragezeichen): urlencode(). Darüber hinaus möchtest du die URL dann noch HTML-sicher machen: htmlspecialchars()

      Wobei man ruhig darauf hinweisen könnte, dass die einzelnen Parameter der URi auch tunlichst _einzeln_ behandelt werden müssen, also jeweils der Name und Parameter getrennt, keinesfalls aber die gesamten Parameter der URi gemeinsam. Das gibt dann nur noch Schrott.

      Für den HTML-Kontext hingegen darf man das Ergebnis dann insgesamt verunstalten. :-)

      Liebe Grüße aus dem schönen Oberharz

      Tom vom Berg

      --
      Nur selber lernen macht schlau
      http://bergpost.annerschbarrich.de
  3. @@paco:

    nuqneH

    <a href="verarbeitungsscript.php?projekt=Projekt 1&...">link</a>

    HTML-Fehler. Du musst '&' escapen. [HTML401 §B.2.2]

    Kann man die Zeichen in der Adresszeile irgendwie escapen?

    Ja, auch das. Nur dass der Kontext hier nicht HTML ist, sondern URI. Also '&' U+0026 escapen durch '%26'. [RFC3986 §2.1]

    Und die Leerzeichen U+0020 natürlich auch.

    <a href="verarbeitungsscript.php?projekt=Icke%20%26%20Er&amp;...">
                                                    ▲▲▲     ▲▲▲▲▲
                                     '&' im Kontext URI     '&' im Kontext HTML
    Qapla'

    --
    Bildung lässt sich nicht downloaden. (Günther Jauch)