JochenT: Apostroph in textfeld bei automatisch erzeugtem Text

Hallo
Ich stehe vor dem Problem, dass ich gerne mit PHP ein HTML input feld erzeugen möchte, in dessem value Attribut ein ' Zeichen vorkommt.
In meinem Script wird eine Excel Tabelle ausgelesen und bestimmte Zeileninhalte sollen untereinander weg in Textfelder geschrieben werden. Taucht jedoch in einem dieser Felder ein ' auf, führt dies bislang zu Fehlern.
Als plumpes Beispiel also einfach mal echo "<input type='submit' value='It's ok' />";
Ich weiß nicht ob man das ganze irgendwie mit Entwertungszeichen lösen könnte, da bliebe jedoch immer noch das Problem, dass ich an sich keinen Text bei value vorgebe sondern jedes mal den Befehl, den Text aus der Tabelle zu holen.

Schonmal danke für alle hilfreichen Tips ;)

  1. Hallo,

    ...Taucht jedoch in einem dieser Felder ein ' auf, führt dies bislang zu Fehlern.
    Als plumpes Beispiel also einfach mal echo "<input type='submit' value='It's ok' />";

    Sehr anschaulich: Du hast hier das Apostroph gleich dreimal drin, d.h., drin ist nur was zwischen den ersten beiden Apostrophen steht 'It'. Wenn alles reinsoll, das Apostroph entweder als Entity codieren oder als numerische Zeichenreferenz: &#39;

    Hotti

    1. Richtig, in dem Fall würde nur das It drinstehen.
      Wie gesagt wird der Text automatisch erzeugt also kann ich das entscheidene Zeichen nicht in irgendeiner Art codieren. Die beiden ' die den value Text eingrenzen kann ich ja auch nicht durch " ersetzen, da ich dann mit dem echo in Konflikt gerate.

      1. Hi,

        Wie gesagt wird der Text automatisch erzeugt also kann ich das entscheidene Zeichen nicht in irgendeiner Art codieren.

        Automatisch wo, wann, von wem ...?

        Die beiden ' die den value Text eingrenzen kann ich ja auch nicht durch " ersetzen, da ich dann mit dem echo in Konflikt gerate.

        Wenn du den Wert in einer Form vorliegen hast, in der du ihn mittels echo ausgeben kannst, dann kannst du ihn an dieser Stelle auch kodieren.

        http://wiki.selfhtml.org/wiki/Artikel:Kontextwechsel

        Und mit dem echo gerätst du nur dann in „Konflikt“, wenn dir die absoluten Grundlagen der PHP-Syntax nicht bekannt sind ... Stichwort Escaping.

        MfG ChrisB

        --
        RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
        1. Hi,

          Wie gesagt wird der Text automatisch erzeugt also kann ich das entscheidene Zeichen nicht in irgendeiner Art codieren.

          Automatisch wo, wann, von wem ...?

          Die beiden ' die den value Text eingrenzen kann ich ja auch nicht durch " ersetzen, da ich dann mit dem echo in Konflikt gerate.

          Wenn du den Wert in einer Form vorliegen hast, in der du ihn mittels echo ausgeben kannst, dann kannst du ihn an dieser Stelle auch kodieren.

          http://wiki.selfhtml.org/wiki/Artikel:Kontextwechsel

          Und mit dem echo gerätst du nur dann in „Konflikt“, wenn dir die absoluten Grundlagen der PHP-Syntax nicht bekannt sind ... Stichwort Escaping.

          MfG ChrisB

          Ok, nichts für ungut aber Beiträge dieser Art helfen einem Hilfesuchenden in absolut keinster Weise, sowas solltet ihr euch generell sparen ;)
          Ich habe in meinem Informatik Studiengang knappe 2 Semester mit PHP gearbeitet, für grundlegende Arbeiten hat es auch immer gereicht, von daher würde ich schon sagen, dass die Grundlagen bei mir vorhanden sind.

          Automatisch erzeugt habe ich im ersten Post erwähnt: Der Text wird mittels eines Scripts aus einer Excel Tabelle geholt auf die ich keinen Einfluss habe. Ich könnte den Text in einer Variable zwischenspeichern und dort bearbeiten... das wäre allerdings sehr aufwändig, zudem hätte ich auch dafür keinen konkreten Lösungsansatz.

          Durch puren Zufall bin ich eben in einem anderen Forum auf eine einfache Lösung gestoßen:
          echo "<input type='text' value='".htmlspecialchars($meinText, ENT_QUOTES)." />";

          Somit hat alles seine Richtigkeit.

          1. Hi,

            Ich habe in meinem Informatik Studiengang knappe 2 Semester mit PHP gearbeitet, für grundlegende Arbeiten hat es auch immer gereicht, von daher würde ich schon sagen, dass die Grundlagen bei mir vorhanden sind.

            Deine Trivialfrage hier beweist das Gegenteil.

            Wenn du da noch nicht mal gelernt hast, wie Strings in PHP korrekt notiert werden können ...

            Durch puren Zufall bin ich eben in einem anderen Forum auf eine einfache Lösung gestoßen:
            echo "<input type='text' value='".htmlspecialchars($meinText, ENT_QUOTES)." />";

            Ja - die hättest du auch aus dem verlinkten Artikel entnehmen, und dabei sogar noch etwas mehr über die Hintergründe lernen können.

            MfG ChrisB

            --
            RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
            1. und dabei sogar noch etwas mehr über die Hintergründe lernen können.

              ... worum ich hier nicht gebeten habe.
              Wenn jemand erweitertes Wissen über etwas verlangt, so wird er danach fragen.
              Diese kurze Lösung war das einzige was ich für das Projekt brauchte, somit hätte man - wenn man es denn überhaupt selbst gewusst hätte - ganz einfach mit einem kurzen Beispiel als Antwort geben können.

              Da man bei Google auf viele ähnliche (nicht konkrete, sonst hätte ich nicht gefragt) Probleme stößt finde ich, dass man es auch nicht als "Trivialfrage" bezeichnen kann. Und wo jetzt mein Problem mit Strings liegen soll verstehe ich auch nicht wirklich.

              Es gibt einfach Leute, deren Lebensinhalt nicht komplett durch PHP bestimmt wird, von daher einfach normal antworten, keine unnötigen Vorträge halten und das Problem ist gelöst.

              1. Hi,

                Und wo jetzt mein Problem mit Strings liegen soll verstehe ich auch nicht wirklich.

                Du hast geschrieben,

                Die beiden ' die den value Text eingrenzen kann ich ja auch nicht durch " ersetzen, da ich dann mit dem echo in Konflikt gerate.

                • das kann eigentlich nur bedeuten, dass du nicht weißt, wie man korrekt mit Strings umgeht in PHP.

                MfG ChrisB

                --
                RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
              2. Mahlzeit JochenT,

                und dabei sogar noch etwas mehr über die Hintergründe lernen können.

                ... worum ich hier nicht gebeten habe.

                ... was aber Maxime in *SELF*HTML ist. Es ist - für alle Beteiligten - weitaus sinnvoller, zu verstehen *warum* etwas soundso ist und welche Möglichkeiten sich daraus für unterschiedliche Situationen ergeben, als einfach nur nach Code zu fragen, Code zu kopieren und Code einfach zu übernehmen.

                Von Letzterem hat der Fragende nichts, da er beim nächsten Mal vermutlich immer noch nicht weiß, wie er sein Problem *selbst* lösen kann und einfach *wieder* nach fertigem Code fragt. Und die Antwortenden sind irgendwann genervt, weil ständig Leute mit Fragen zu Trivialproblemen um die Ecke kommen und nicht erkennen lassen, dass sie ein Interesse daran hätten, ihre Probleme selbst in den Griff zu bekommen.

                Da man bei Google auf viele ähnliche (nicht konkrete, sonst hätte ich nicht gefragt) Probleme stößt finde ich, dass man es auch nicht als "Trivialfrage" bezeichnen kann.

                Diese Schlussfolgerung ist IMHO mehr als gewagt. Nur weil in diversen Foren o.ä. sehr oft derartige Probleme dargelegt werden bzw. um Lösungen dazu nachgesucht wird, heißt das nicht, dass es sich dabei um absolute "Rocket science" handelt - in meinen Augen zeigt das vielmehr, dass eine unendliche (da nachwachsende) Anzahl von Leuten kein Interesse daran hat, ihre Probleme grundlegend zu analysieren und zu verstehen, sondern eher eine schnelle Lösung ohne Nachdenken wünscht ... mit den oben erwähnten Nachteilen für alle Beteiligten.

                Und wo jetzt mein Problem mit Strings liegen soll verstehe ich auch nicht wirklich.

                Das zeigt - IMHO recht deutlich - dass Du tatsächlich gravierende Mängel in bezug auf Grundlagen in PHP hast: ChrisB hat Dir mittlerweile mehrfach erklärt, was das prinzipielle Problem ist und wo grundlegende Informationen dazu und Hilfen zum Umgehen des Problems zu finden sind.

                Es gibt einfach Leute, deren Lebensinhalt nicht komplett durch PHP bestimmt wird,

                Kontextwechsel gibt es nicht nur in Verbindung mit PHP, sondern *IMMER* und in *JEDER* Programmiersprache ... und von einem Studenten der Informatik würde ich eigentlich deutlich mehr Verständnis, Neugier und Interesse für bzw. bei derartigen Problemen erwarten.

                von daher einfach normal antworten, keine unnötigen Vorträge halten und das Problem ist gelöst.

                Ist es eben gerade *nicht* (siehe oben) - es ist lediglich verschoben bzw. vertagt.

                MfG,
                EKKi

                --
                sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
              3. Hallo,

                und dabei sogar noch etwas mehr über die Hintergründe lernen können.
                ... worum ich hier nicht gebeten habe.

                dann bist du im falschen Fil^WForum gelandet.

                Wenn jemand erweitertes Wissen über etwas verlangt, so wird er danach fragen.
                Diese kurze Lösung war das einzige was ich für das Projekt brauchte, somit hätte man - wenn man es denn überhaupt selbst gewusst hätte - ganz einfach mit einem kurzen Beispiel als Antwort geben können.

                Und genau das ist *nicht* das erklärte Ziel des SELFHTML-Forums.

                Und wo jetzt mein Problem mit Strings liegen soll verstehe ich auch nicht wirklich.

                Deine Frage war eigentlich eine HTML-Frage: "Wie müssen Stringbegrenzerzeichen in einem Attribut notiert werden, wenn sie selbst Teil des Attributwerts sein sollen?" Das ist HTML-Grundwissen.
                Und da du das HTML mit PHP erzeugst, wäre in zweiter Linie dann gekommen: "Gibt es in PHP eine Funktion, die das für mich erledigt?" - Und das ist wiederum PHP-Grundlagenwissen, ebenso wie im Prinzip auch der von ChrisB schon verlinkte Artikel über Kontextwissen, der sich nicht konkret auf PHP bezieht, sondern auf Datenverarbeitung ganz allgemein.

                Es gibt einfach Leute, deren Lebensinhalt nicht komplett durch PHP bestimmt wird, von daher einfach normal antworten, keine unnötigen Vorträge halten und das Problem ist gelöst.

                Nein. Das eigentliche Problem hast du vermutlich immer noch nicht wirklich verstanden, und so ist die Wahrscheinlichkeit groß, dass du bei nächster Gelegenheit, wenn es in leicht veränderter Form auftritt, wieder fragen musst.

                So long,
                 Martin

                --
                Man gewöhnt sich an allem, sogar am Dativ.
                Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
              4. @@JochenT:

                nuqneH

                ... worum ich hier nicht gebeten habe.
                Wenn jemand erweitertes Wissen über etwas verlangt, so wird er danach fragen.

                Nein, manchmal ist ist eine über die Fragestellung hinausgehende Antwort dringend geboten, denn …

                Es gibt einfach Leute, deren Lebensinhalt nicht komplett durch PHP bestimmt wird, von daher einfach normal antworten, keine unnötigen Vorträge halten und das Problem ist gelöst.

                Diese Einstellung ist bei der PHP-Entwicklung überhaupt nicht angesagt. Entweder man macht es richtig oder man lässt besser die Finger von PHP. Denn man kann bei PHP einiges falsch machen und riesige Sicherheitslöcher aufreißen. (Cross-Site Scripting (XSS))

                Das war auch bei dir der Fall, denn dein „Text wird mittels eines Scripts aus einer Excel Tabelle geholt auf die [du] keinen Einfluss [hast]“.

                Eingaben aus fremder Quelle sind prinzipiell als „böse“ anzusehen und man darf sie keinesfalls unbearbeitet per echo in HTML-Code einfügen. Die Behandlung mit htmlspecialchars verhindert das Schlimmste und ist dringeng geboten – unabhängig von deinem ursprünglichen Problem.

                Qapla'

                --
                Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
                (Mark Twain)
      2. hi,

        Richtig, in dem Fall würde nur das It drinstehen.
        Wie gesagt wird der Text automatisch erzeugt also kann ich das entscheidene Zeichen nicht in irgendeiner Art codieren. Die beiden ' die den value Text eingrenzen kann ich ja auch nicht durch " ersetzen, da ich dann mit dem echo in Konflikt gerate.

        Du kriegst weniger Probleme dieser Art (Kontextwechsel, Escape usw.) wenn Du Inhalte und Darstellung prozedural, besser objektorientiert, klar voneinander trennst. Z.B. hättet Du dann eine Object->Methode zur Ausgabe eines HTML-Formulars wobei die Inhalte zum Befüllen der Inputfelder mit dem Objekt geliefert werden, welches diese Methode aufruft.

        Alles Andere führt zwangsläufig zu Spaghetti-Code, der unübersichtlich, unproduktiv, schwer zu pflegen ist und eine Teamarbeit unmöglich macht. Selbst als Einzelgänger kriegst Du spätestens dann damit ein Problem, wenn Du nach einiger Zeit an den Scripten was ändern musst.

        Hotti

        --
        Wenn der Kommentar nicht zum Code passt, kann auch der Code falsch sein.
  2. Um die Sache mal anders aufzuzäumen: Das Zeichen hinter „It“ ist kein Apostroph, sondern dieses Zeichen auf der Rautetaste (Unicode U+0027).
    Eventuell erledigt sich ja alles andere, wenn du im Text tatsächlich ein Apostroph(Uunicode U+2019) verwendest.

    MfG
    momonster

    1. Hi!

      Um die Sache mal anders aufzuzäumen: Das Zeichen hinter „It“ ist kein Apostroph, sondern dieses Zeichen auf der Rautetaste (Unicode U+0027).
      Eventuell erledigt sich ja alles andere, wenn du im Text tatsächlich ein Apostroph(Uunicode U+2019) verwendest.

      Nein, dann erledigt sich nur der Fall mit den '. Es bleiben immer noch die anderen HTML-eigenen Zeichen. Es ist besser, gleich die passende Funktion auf die Daten anzuwenden: htmlspecialchars() - in dem Fall mit Extra-Parameter für die '. Natürlich spricht nichts dagegen, die typografisch richtige Zeichen zu verwenden, doch die HTML-Zeichen-Problematik muss man auch dann noch beachten.

      Lo!

    2. Moin,

      Um die Sache mal anders aufzuzäumen: Das Zeichen hinter „It“ ist kein Apostroph, sondern dieses Zeichen auf der Rautetaste (Unicode U+0027).

      Das Zeichen U+0027 hat lt. Unicode Konsortium den Namen 'APOSTROPHE'.

      Eventuell erledigt sich ja alles andere, wenn du im Text tatsächlich ein Apostroph(Uunicode U+2019) verwendest.

      Das Zeichen U+2019 hat lt. Unicode Konsortium den Namen 'RIGHT SINGLE QUOTATION MARK'

      Das 'I' in IT steht für Information ;)

      Hotti

      --
      Wenn der Kommentar nicht zum Code passt, kann auch der Code falsch sein.
      1. @@hotti:

        nuqneH

        Das Zeichen U+0027 hat lt. Unicode Konsortium den Namen 'APOSTROPHE'.

        Nomen est omen oder Namen sind Schall und Rauch?

        Das Zeichen U+25B2 hat den Namen 'BLACK UP-POINTING TRIANGLE'. Und was ist daran schwarz?

        <span style="background: blue; color: white"></span>

        Und wenn du schon mit der Unicode-Spec daherkommst, dann bitte richtig!

        “U+0027 […]
        Description: […]
        • neutral (vertical) glyph with mixed usage
        • 2019 is preferred for apostrophe […]”

        Das Zeichen U+2019 hat lt. Unicode Konsortium den Namen 'RIGHT SINGLE QUOTATION MARK'

        “U+2019 […]
        Description: […]
        • this is the preferred character to use for apostrophe”

        Das 'I' in IT steht für Information ;)

        Das 'H' in Hotti steht für Halbwissen.

        Qapla'

        --
        Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
        (Mark Twain)
        1. hi Gunnar (mit G wie Ganzwissender),

          Nomen est omen oder Namen sind Schall und Rauch?
          Das 'H' in Hotti steht für Halbwissen.

          Siehe eine Zeile oben darüber ;)
          Hotti

          --
          Wenn der Kommentar nicht zum Code passt, kann auch der Code falsch sein.