umkehrung von htmlentities / htmlspecialchars

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • umkehrung von htmlentities / htmlspecialchars

    gibt es eine umkehrfunktion zu htmlspecialchars / htmlentities / nl2br ?

    warum ich das brauche:
    auf einer Seite gebe ich Text in eine Textarea ein. Dieser Text wird in die Datenbank geschrieben. Vor dem Schreiben in die DB wende ich nl2br() und htmlspecialchars() auf den Inhalt der textarea an, damit die Sonderzeichen entsprechend umgewandelt werden und als korrekt als HTML dargestellt werden.

    Wenn ich nun den Text editieren lassen möchte, und den Text dazu aus der Datenbank auslese um ihn in eine Textarea zu schreiben, dann muss ich die umgewandelten Sonderzeichen ja wieder "zurückumwandeln", damit in der Textarea dann auch z.B: wieder ein "ö" anstatt dem "&\ouml;" steht.

    gibt es dafür eine entsprechende Funktion ? (und wenn ja, warum finde ich die nicht ) oder muss ich das wie bisher per str_replace / preg_replace erledigen ?

    danke im voraus,
    cb
    Hans Matthöfers Widerspruch zur Expertenerkenntnis: Künstliche Intelligenz ist besser als natürliche Dummheit.

  • #2
    schreibe die daten doch einfach 1:1 in die DB rein.

    nur bei der ausgabe verwendest du htmlspecialchars() & Co.

    ist doch einfacher und besser ....
    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


    Kommentar


    • #3
      Ich würde das auf jeden Fall anders machen ... :

      Speichern in der Datenbank mit mysql_escape_string() respektive mysql_real_escape_string() ab 4.3.0 damit auch die Charsets berücksichtigt werden ...

      Auslesen der Datenbank und Umwandelung bei der Darstellung.
      carpe noctem

      [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
      [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

      Kommentar


      • #4
        joh !

        @abraxas
        joh, keine schlechte idee ... ich versuchs halt immer erstmal so kompliziert wie möglich,

        thx !
        Hans Matthöfers Widerspruch zur Expertenerkenntnis: Künstliche Intelligenz ist besser als natürliche Dummheit.

        Kommentar


        • #5
          Re: umkehrung von htmlentities / htmlspecialchars

          Wenn ich nun den Text editieren lassen möchte, und den Text dazu aus der Datenbank auslese um ihn in eine Textarea zu schreiben, dann muss ich die umgewandelten Sonderzeichen ja wieder "zurückumwandeln", damit in der Textarea dann auch z.B: wieder ein "ö" anstatt dem "&\ouml;" steht.
          nein, das musst du nicht!

          wenn du schreibst

          <textarea> &amp;lt;a&amp;gt; </textarea>,

          dann hast du nachher in der textarea sichtbar drinstehen <a>


          eigentlich musst du es sogar so lassen, wenn du korrektes html erzeugen willst, wenn du nämlich in die seite reinschreiben würdest

          <textarea> 5 < 6 </textarea>

          wäre dies kein valides html, da du für < nicht die entities-schreibweise benutzt hast.
          I don't believe in rebirth. Actually, I never did in my whole lives.

          Kommentar


          • #6
            Code-Schnipsel > htmlentities rückgängig

            nl2br fügt einfach vor Zeilenumbrüchen <br /> ein, daher genügt str_replace('<br />', '', $text)
            mein Sport: mein Frühstück: meine Arbeit:

            Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

            Kommentar


            • #7
              @ titus : jaui, danke ! btw: warum ein <br />und kein <br> ??

              @ wahsaga: sorry, ich raff nu nich wirklich, was du meinst <blond guck>, aber links oder image tags, etc kommen in der form sowieso nicht vor ...

              @ goth: versteh ich das richtig, dass du im prinzip die gleiche vorgehensweise wie Abraxas vorschlägst , nur eben mit mysql_escape_string beim insert / update (obwohl ich nu abraxas nicht unterstellen will, dass er das nicht macht / mächte <in endlosen detaildiskussionen verlier> )

              grüzze
              cb


              Hans Matthöfers Widerspruch zur Expertenerkenntnis: Künstliche Intelligenz ist besser als natürliche Dummheit.

              Kommentar


              • #8
                @ wahsaga: sorry, ich raff nu nich wirklich, was du meinst <blond guck>, aber links oder image tags, etc kommen in der form sowieso nicht vor ...
                ich wollte lediglich klarstellen, dass es keine gute idee ist, htmlentities wieder rückgängig zu machen, wenn du den text in einer textarea ausgibst!

                das ist sogar eher kontraproduktiv, da du dadurch u.u. nicht validen code erzeugst, wenn z.b. eine spitze klammer oder ein " im text enthalten ist.

                du musst diese zeichen auch innerhalb von zwei <textarea> </textarea>-tags in ihrer kodierten form schreiben, wenn du richtiges html erzeugen willst.
                I don't believe in rebirth. Actually, I never did in my whole lives.

                Kommentar


                • #9
                  hmm ...

                  meine methode war bisher so:
                  textfelddaten -> htmlentities ->nl2br -> in die DB schreiben (zum insert)
                  bzw. beim update:
                  aus der DB lesen -> nl2br rückgängig -> htmlentities rückgängig -> in das textfeld schreiben -> text bearbeiten -> veränderter text -> htmlentities -> nl2br -> eintrag updaten

                  das hatte den vorteil, das der fertige html code schon in der db lag und ich beim einfügen in html nicht mehr gross auf irgendwelche feinheiten achten musste und den text einfach so aus der variablen übernehmen konnte:
                  aus DB lesen -> anzeigen -> feddich

                  und um ehrlich zu sein, ich (als fauler mensch ) fand das gar nicht mal so schlecht, weil ich deutlich weniger inserts und updates zu programmieren habe als ausgaben ... und da ich beim insert / update sowieso schon überprüfe was da nun eingefügt werden soll, war es auch kein grosses problem den text in html umzuwandeln

                  der html code wurde dabei eigentlich nicht verbogen. hat auch bisher ganz gut funktioniert, nur eben mit der einschränkung, dass das gegenstück zu htmlentities "selbstgestrickt" ist.

                  und da frach ich mich doch, warum gips da keine funktion für ? wos doch für alles und jeden eine entsprechende funktion in php gibt ...

                  grüzze
                  cb
                  Hans Matthöfers Widerspruch zur Expertenerkenntnis: Künstliche Intelligenz ist besser als natürliche Dummheit.

                  Kommentar


                  • #10
                    das hatte den vorteil, das der fertige html code schon in der db lag und ich beim einfügen in html nicht mehr gross auf irgendwelche feinheiten achten musste und den text einfach so aus der variablen übernehmen konnte:
                    aus DB lesen -> anzeigen -> feddich
                    na da sach' ich ja auch gar nix gegen - mach ich bei meinem weblog übrigens genauso.

                    wenn eine aktion (insert/ update) selten vorkommt, die andere (ausgeben) aber sehr viel öfters, dann wäre man ja blöd, wenn man die umformung beim ausgeben vornimmt...
                    der html code wurde dabei eigentlich nicht verbogen. hat auch bisher ganz gut funktioniert, nur eben mit der einschränkung, dass das gegenstück zu htmlentities "selbstgestrickt" ist.
                    nochmal: du brauchst kein gegenstück zu htmlentities!

                    wenn du den code beim ändern in eine textarea reinschreibst, dann kannst du den ruhig mit htmlentities da rein schreiben, so wie er in der db ist - es wird dann vom browser richtig angezeigt, und auch beim wieder abschicken des formulares kommen die zeichen wieder als 'normale' zeichen an, also ganz so, als ob du sie ganz normal über die tastatur eingegeben hättest.
                    I don't believe in rebirth. Actually, I never did in my whole lives.

                    Kommentar


                    • #11
                      Original geschrieben von i2dx
                      @ titus : jaui, danke ! btw: warum ein <br />und kein <br> ??
                      <br /> ist erstens XML-konform und funktioniert zweitens auch mit alten Browsern (zB Netscape 4).
                      mein Sport: mein Frühstück: meine Arbeit:

                      Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

                      Kommentar


                      • #12
                        jetz is der groschen gefallen

                        @wahsaga:

                        wie recht du hast ... ich habs grad getestet ( sonzt würd ich das ja im leben nicht glauben ). man muss nur die linebreaks wieder rückgängig machen ... (wie Titus das beschrieben hat ...)

                        hat zwar was länger gedauert bis ich das gerafft hab, aber trozdem danke

                        grüzze
                        cb
                        Hans Matthöfers Widerspruch zur Expertenerkenntnis: Künstliche Intelligenz ist besser als natürliche Dummheit.

                        Kommentar

                        Lädt...
                        X