Der PHP_Anfänger: html_entity_decode und InputType Text

Hallo zusammen

Einige von euch kennen ja bestimmt das Szenario, dass man die Daten für die Übertragung zur DB so bearbeiten will, dass keine Bedrohung von den zu versendenden Daten aus geht.

Ich habe das bis anhin so gemacht:

  
$addCatName = addslashes(htmlentities($_POST['formCatName']));  

Ich habe mit dieser Konstellation gute Erfahrungen gemacht, falls jemand ein noch effektivere Variante anwendet wäre ich über eine Belehrung sehr erfreut :)

Jetzt hatte ich das Problem, dass wenn ich einen String in der DB nach dieser Prozedur abgelegt und diesen anschliessend wieder ausgelesen habe, nur den Stringteil zurückbekommen hatte, der bis zum ersten "-Zeichen ging.

bsp. String der in DB eingelesen wird (ohne Umwandlung) -> Der "Grosse" Test im Ötal. Wenn ich diesen String in ein Text-Feld ausgeben lassen, so erscheint nur -> Der , und das wars, wenn ich hingegen den String in einem Textarea ausgeben liess, so wurde dieser korrekt ausgegeben.

Schlussendlich habe ich das Problem gelöst, in dem ich den String bei der Ausgabe wie folgt decodiert habe ->
echo htmlspecialchars(html_entity_decode($dataCatSelectID -> CatName));

Aber ich finde diese Lösung kann nicht richtig sein, oder? Weiss jemand von euch, wie man diese ganze Prozedur optimieren könnte?

  1. Hallo,

    Einige von euch kennen ja bestimmt das Szenario, dass man die Daten für die Übertragung zur DB so bearbeiten will, dass keine Bedrohung von den zu versendenden Daten aus geht.

    nein, das Szenario kenne ich nicht. Ich weiß nur, dass manche Anfänger es so ähnlich machen wollen, weil sie die wirkliche Problematik nicht erkennen. PHP ist mit seinem unseligen Feature "Magic Quotes" nicht ganz schuldlos daran.

    $addCatName = addslashes(htmlentities($_POST['formCatName']));

    
    > Ich habe mit dieser Konstellation gute Erfahrungen gemacht, falls jemand ein noch effektivere Variante anwendet wäre ich über eine Belehrung sehr erfreut :)  
      
    Diese Variante verfälscht Daten. Validiere Eingabedaten. Speichere validierte Rohdaten.  
      
    
    > Aber ich finde diese Lösung kann nicht richtig sein, oder? Weiss jemand von euch, wie man diese ganze Prozedur optimieren könnte?  
      
    Du sollstest den Artikel [Kontextwechsel](http://wiki.selfhtml.org/wiki/Artikel:Kontextwechsel) durcharbeiten. Da ist die Gesamtproblematik sehr gut aufgearbeitet.  
      
      
    Freundliche Grüße  
      
    Vinzenz
    
    1. Danke für die schnelle Antwort Vinzenz.

      Könntest du mir eine Syntax empfehlen die sich eignet, Strings mit Umlauten und Sonderzeichen sicher in eine DB zu übertragen und anschliessend wieder 1:1 auf der Webseite anzeigenzulassen?

      1. Hallo,

        Könntest du mir eine Syntax empfehlen die sich eignet, Strings mit Umlauten und Sonderzeichen sicher in eine DB zu übertragen

        behandle die Zeichenkette beim Eintragen je nach verwendeter MySQL-Schnittstelle mit mysqli_real_escape_string() bzw. mysql_real_escape_string(). Falls nötig, musst Du die Auswirkungen der Magic Quotes rückgängig machen.

        und anschliessend wieder 1:1 auf der Webseite anzeigenzulassen?

        wenn die Daten als solche im HTML-Kontext ausgegeben werden sollen, behandle die Daten, die Du aus der DB gelesen hast, mit htmlspecialchars().

        Andere Kontexte erfordern andere Behandlungsmethoden. Es könnte zum Beispiel sein, dass Du die Daten in einen URL-Kontext, einem Javascript-Kontext oder sogar einem geschachtelten Kontext ausgeben möchtest ...

        Aber bitte: lies den in meinem ersten Beitrag verlinkten Artikel zum Kontextwechsel. Da steht das alles drin.

        Freundliche Grüße

        Vinzenz

      2. @@Der PHP_Anfänger:

        nuqneH

        Danke für die schnelle Antwort Vinzenz.

        Könntest du mir eine Syntax empfehlen die sich eignet, Strings mit Umlauten und Sonderzeichen sicher in eine DB zu übertragen und anschliessend wieder 1:1 auf der Webseite anzeigenzulassen?

        Das hat nichts mit Syntax zu tun, sondern mit einer geeigneten Zeichencodierung. [ESCAPES] UTF-8 ist in den allermeisten Fällen die beste Wahl.

        Qapla'

        --
        Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
        (Mark Twain)
        1. Hi!

          Das hat nichts mit Syntax zu tun, sondern mit einer geeigneten Zeichencodierung. [ESCAPES] UTF-8 ist in den allermeisten Fällen die beste Wahl.

          Und dann muss man noch wissen, wo man konfiguriert, dass sich die Systeme untereinander verstehen: SELFHTML-Wiki - Themen:Zeichencodierung

          Lo!