Bessinger: Wie gespeicherte Daten codieren

Hallo,
nach meinen bisherigen Untersuchungen werden mit escapeHTML folgende (und nur diese) Zeichen codiert:   "  &  '  <  >.
Ist dies korrekt?
Wenn ich Eingaben (z.B. im Gästebuch) in eine Datei speichere, ist dies am sinnvollsten in der Originalform oder wie oben codiert?
Wie ist eine URL-Angabe sinnvollerweise zu speichern?
In einem Textarea-Feld kommen Zeilenvorschübe vor (X'0A0D'). Diese werden
offensichtlich mit escapeHTML nicht codiert, wie werden diese abgespeichert?
Fragen über Fragen!
Gibt es eine einfache Beschreibung/ein einfaches Beispiel das folgendes Szenario darstellt:

  • Eingabe eines beliebigen Textes in Textarea-Feld
  • Abspeichern des Inhalts in Text-Datei
  • (Reine) Anzeige des Inhalts der Textdatei (sollte so sein wie die ursprüngliche Eingabe (incl. Zeilenumbrüche).
  • Anzeige des Inhalts der Textdatei (sollte so sein wie die ursprüngliche Eingabe (incl. Zeilenumbrüche) in Textarea-Feld zur Korrektur.
    Hoffe auf Eure Hilfe
    Bessinger
  1. Hi,

    nach meinen bisherigen Untersuchungen werden mit escapeHTML folgende (und nur diese) Zeichen codiert:   "  &  '  <  >.
    Ist dies korrekt?

    wenn mich meine Erinnerung nicht trügt: Ja.

    Wenn ich Eingaben (z.B. im Gästebuch) in eine Datei speichere, ist dies am sinnvollsten in der Originalform oder wie oben codiert?

    Originalform. Die Kodierung findet in genau dem Moment statt, in dem Du die Werte in einen Kontext bringst - ob dies ein HTML-Kontext ist, kannst Du vorher ja nicht wissen.

    Wie ist eine URL-Angabe sinnvollerweise zu speichern?

    In Originalform.

    In einem Textarea-Feld kommen Zeilenvorschübe vor (X'0A0D'). Diese werden
    offensichtlich mit escapeHTML nicht codiert, wie werden diese abgespeichert?

    So wie sie sind.

    Gibt es eine einfache Beschreibung/ein einfaches Beispiel das folgendes Szenario darstellt:

    Es gibt eine einfache Regel:

    Wenn Du einen Wert in einen Kontext bringst, musst Du ihn kontextspezifisch kodieren. Entnimmst Du einen Wert aus einem Kontext, musst Du ihn kontextspezifisch dekodieren.

    Die Tatsache, dass ich mich gewöhnlich auf den ersten dieser beiden Sätze beschränke, beruht darauf, dass die Dekodierung in den meisten Fällen automatisch erfolgt.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. In einem Textarea-Feld kommen Zeilenvorschübe vor (X'0A0D'). Diese werden
      offensichtlich mit escapeHTML nicht codiert, wie werden diese abgespeichert?

      So wie sie sind.

      Das Problem ist jetzt folgendes.
      Ein Eintrag wird in einer Zeile abgelegt.
      Wenn jetzt in dem Eintrag auch Zeilenvorschübe vorkommen, haut das nicht mehr hin.
      Also muss ich diese (in der Eingabe vorkommenden) doch irgendwie codieren- aber wie?

      1. Hi,

        Ein Eintrag wird in einer Zeile abgelegt.

        dann musst Du Dir eine Kodierung ausdenken, die diesem Kontext gerecht wird.

        Cheatah

        --
        X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
  2. Deine schwierigste Wahl wird wohl die Wahl der Datenbank sein
    Diese kann auch ein Textfile sein.

    Jedes Speichermedium hat seine eigene unabhängige Formatierung. Zeichen im Inhalt, die mit dieser Formatierung Probleme bieten könnten, müssen escaped werden.

    Beispiel einer Textdatei

    par1=wert\tpar2=wert\t\n

    Hier wird jedes Datum durch den Namen eingeleitet und durch einen tabulatur abgeschlossen.
    Der ganze Record wird durch ein Linefeed abgeschlossen.
    Damit gibt es zwei sensible Zeichen \t Tabulator und \n Linefeed, die nicht im Inhalt der Daten vorkommen dürfen und durch eine Regel maskiert werden müssen, wenn sie gespeichert werden, aber wiederum demaskiert werden müssen, wenn sie aus dem File gelesen werden.

    Eine mögliche Regel wäre nun:

    Maskerung
    $frominput =~ s/\t/\t/g;
    $frominput =~ s/\n/\n/g;

    Demaskierung
    $fromdata =~ s/\t/\t/g;
    $fromdata =~ s/\n/\n/g;

    Diese Maskierung hat immer noch eine gewisse Chance, mit userinput zu kollidiern.
    Wenn auch Browser in Formulaen kein \t als zeichen erlauben, so erlauben sie doch die Zeichenfolge "" "t", wodurch dann beim Demaskieren ein \t hergestellt würde.

    Datenbanken haben ihre eigene Mechanismen und vorgefertigten Behandlungsmethoden.

    mfg Beat

    --
    Woran ich arbeite:
    X-Torah
    ><o(((°>           ><o(((°>
       <°)))o><                     ><o(((°>o