Enrico: Beibehaltung von Vokalen / kompliziertes Vorhaben

Und schon wieder ich :-)

Zunächst ein kleineres "Problem" bzw. eine kosmetische Ungereimtheit:

Ich habe eine Textdatei, die ich einlesen und am Bildschirm ausgeben lassen.

In der Textdatei sind Vokale ganz normal auch als solche notiert, bei der
Ausgabe im Browser habe ich aber statt den Vokalen und Bindestrichen nur
jeweils ein Fragezeichen.

Wie kann ich dieses Verhalten umgehen ?
Muß ich hier im Browser oder bei meiner PHP-Datei irgendetwas umstellen ?

Doch ist dies das geringere Übel, möchte ich aber dennoch abstellen.

Weitaus mehr beschäftigt mich ein Vorhaben, dessen Umsetzung wohl mehr als
nur kompliziert scheint:

Die Sortierung und Filterung meiner Einträge nach verschiedenen Kriterien.

Meine "Datenbank" ist nach folgendem Muster aufgebaut:

DVD-Nr.|Titel|Inhalt|Genre|FSK

Ich möchte folgende Funktionalitäten ermöglichen:

-Auf- und absteigende Sortierung der aktuellen Ansicht anhand...
...der DVD-Nr oder...
...des Titels oder...
...des Genres oder...
...der FSK-Einstufung
-Filterung der aktuellen Ansicht nach DVDs, deren Titel mit einer
Ziffer oder dem Anfangsbuchstaben "A" oder dem Anfangsbuchstaben "B" usw.
beginnen
-Filter zurücksetzen, d.h. die DVD-Liste komplett anzeigen (dies ist kein
Thema, das mache ich ja bereits nach Auruf der Verwaltung, abgesehen von
obigem optischen Makel)

Ich habe deshalb bei den aufgeführten Funktionalitäten "aktuelle Ansicht"
geschrieben, weil es ja sein kann, dass ich beispielsweise die Liste zunächst
nach Titeln mit dem Anfangsbuchstaben "C" filtern und danach anhand des Genres
absteigend sortieren lassen will oder ich sortiere die Liste nach den DVD-Nr.
absteigend und filtere im Anschluß daran nach Titeln, die mit einer Ziffer
beginnen.

Es soll also, sofern umsetzbar, alles möglich sein.

Wie gehe ich hier bezüglich der Programmierung am Besten vor ?
Was benötige ich alles zur Umsetzung ?
Könnt Ihr mir hier Einstiegtips geben ?

Zum wiederholten Male:

Vielen lieben Dank für Eure Hilfe, es ist hier ein wirklich tolles Forum.

Gruß,
Enrico

  1. Hallo,

    In der Textdatei sind Vokale ganz normal auch als solche notiert, bei der
    Ausgabe im Browser habe ich aber statt den Vokalen und Bindestrichen nur
    jeweils ein Fragezeichen.

    Wie kann ich dieses Verhalten umgehen ?
    Muß ich hier im Browser oder bei meiner PHP-Datei irgendetwas umstellen ?

    Du musst den richtigen DOCTYPE verwenden. In deinem Fall UTF-8.

    Ich möchte folgende Funktionalitäten ermöglichen:

    -Auf- und absteigende Sortierung der aktuellen Ansicht anhand...
    Wie gehe ich hier bezüglich der Programmierung am Besten vor ?
    Was benötige ich alles zur Umsetzung ?
    Könnt Ihr mir hier Einstiegtips geben ?

    Manchmal hilft schon ein Blick ins Handbuch.

    Grüße, Matze

    1. Moin!

      In der Textdatei sind Vokale ganz normal auch als solche notiert, bei der
      Ausgabe im Browser habe ich aber statt den Vokalen und Bindestrichen nur
      jeweils ein Fragezeichen.

      Wie kann ich dieses Verhalten umgehen ?
      Muß ich hier im Browser oder bei meiner PHP-Datei irgendetwas umstellen ?

      Du musst den richtigen DOCTYPE verwenden. In deinem Fall UTF-8.

      Fehler: Der DOCTYPE sagt nichts über das Encoding aus. UTF-8 ist ein Encoding-Schema.

      Abgesehen davon frage ich mich, wie du so zielsicher auf "UTF-8" kommst. Ich würde das richtige Encoding vielmehr auf etwas ganz anderes setzen.

      - Sven Rautenberg

      --
      "Love your nation - respect the others."
      1. Hallo,

        Fehler: Der DOCTYPE sagt nichts über das Encoding aus. UTF-8 ist ein Encoding-Schema.

        Abgesehen davon frage ich mich, wie du so zielsicher auf "UTF-8" kommst. Ich würde das richtige Encoding vielmehr auf etwas ganz anderes setzen.

        Reines raten^^ Das ist nunmal der häufigste Grund denk ich ganz einfach.
        Danke für die Berichtigung!

        Grüße, Matze

        1. Hallo nochmal,

          Ich würde das richtige Encoding vielmehr auf etwas ganz anderes setzen.

          dann lass uns doch bitte an deinem Wissen teilhaben.

          Grüße, Matze

  2. Hello out there!

    statt den Vokalen und Bindestrichen

    Vokale und Bindestriche??

    Meinst du vielleicht Vokale mit Akzentzeichen?

    nur jeweils ein Fragezeichen.

    Das passiert, wenn du das Dokument in der Zeichencodierung ISO-8859-1 abspeicherst; es aber als UTF-8 auslieferst (1) oder deinem Browser sagst, es solle es als UTF-8-codiert ansehen (2).

    Muß ich hier im Browser

    Wenn (2), dann ja.

    oder bei meiner PHP-Datei irgendetwas umstellen ?

    Wenn du dort als erstes header() zu stehen hast, dann ja. [http://www.w3.org/International/O-HTTP-charset]

    Ansonsten wäre deine Serverkonfiguration zu ändern. [http://www.w3.org/International/questions/qa-htaccess-charset]

    See ya up the road,
    Gunnar

    --
    „Und [dieses Forum] soll […] auch ein Fachforum bleiben und kein Psychologieforum werden.“ (Kirsten Evers)
  3. Hello,

    Und schon wieder ich :-)

    Das zeugt von Ausdauer und dass wir Dir hier helfen konnten. Sonst würdest Du wohl kaum wiederkommen ;-))

    Ich habe eine Textdatei, die ich einlesen und am Bildschirm ausgeben lassen.

    Dazu müsste man wissen, wie Du die Daten in die Textdatei hineinbekommen hast.
    Ich vermute mal, dass Du die Musterdaten mit einem Editor eingefügt hast.
    Nun wäre es interessant zu wissen, mit welcher Codierung dieser Editor die Daten speichert.

    Du könntest auch mal mit einem Hex-Editor in die Datei hineinschauen. Viele Editoren können das. Das  geht aber nicht mit Doppelklick auf den Link zur Datei, sondern nur, indem Du erst den Editor öffnest, und dann über den Datei-Öffnen Dialog mit der Einstellung "Binär" oder "Hexadezimal" die Datei öffnest.

    In der Textdatei sind Vokale ganz normal auch als solche notiert, bei der
    Ausgabe im Browser habe ich aber statt den Vokalen und Bindestrichen nur
    jeweils ein Fragezeichen.

    Wie sie wirklich in der Datei stehen, kannst Du mit demsselben Editor ohne Änderung des Öffnungsmodus meistens nicht feststelle, da er üblicherweise denselben nimmt, wie beim Erstellen. Wenn er also beim Erstellen aus aus einem A die Bytefolge "08 15" machen würde, dann würde er Dir beim wieder anzeigen aus "08 15" eben wieder ein A machen. Das ist jetzt aber nur ein Beispiel!

    Der Browser siehrt das dannaber ganz anders, weil er ja nicht wissen kann, mit welcher Codierung der Editor die Zeichen abgespeichert hat. Das musst Du ihm sagen, nur dafür musst Du es selber erst einmal wissen.

    Muß ich hier im Browser oder bei meiner PHP-Datei irgendetwas umstellen ?

    Nur an Deinem Editor und dan der PHP-Datei, die den HTML-Code erzeugt.

    Und solltest Du die Codierung UTF-8 verwenden wollen, wovon ich Deinem speziellen Fall abrate[1], dann, musst Du auch die Multibyte-Funktionen von PHP verwenden anstelle der normalen Stringfunktionen, um mit den Daten zu arbeiten.
    http://de3.php.net/manual/en/ref.mbstring.php

    [1] Da Du mit Low-LevelDateien arbeitest und erst einmal lernen willst, wie Du Daten verwalten, sortieren, filtern usw. kannst, Würd ich erteinmal bei ISO 8859-1 als Codierung bleiben. Hierbei handelt es sich um einen Single-Byte-Code. Dafür gibt es die normalen Stringfunktionen in PHP und, was für Deine Zwecke nicht unwichtig ist, auch fertige Arrayfunktionen für das Sortieren von Daten und Schlüsseln. Für die Arrayfunktionen konnte ich nämlich noch keine Multibyte-Funktionen finden...

    Die Sortierung und Filterung meiner Einträge nach verschiedenen Kriterien.
    Meine "Datenbank" ist nach folgendem Muster aufgebaut:

    DVD-Nr.|Titel|Inhalt|Genre|FSK

    Ich möchte folgende Funktionalitäten ermöglichen:

    -Auf- und absteigende Sortierung der aktuellen Ansicht anhand...
    ...der DVD-Nr oder...
    ...des Titels oder...
    ...des Genres oder...
    ...der FSK-Einstufung
    -Filterung der aktuellen Ansicht nach DVDs, deren Titel mit einer
    Ziffer oder dem Anfangsbuchstaben "A" oder dem Anfangsbuchstaben "B" usw.
    beginnen
    -Filter zurücksetzen, d.h. die DVD-Liste komplett anzeigen (dies ist kein
    Thema, das mache ich ja bereits nach Auruf der Verwaltung, abgesehen von
    obigem optischen Makel)

    Dafür sind Arrays besonders gut geeignet.
    Du kannst das Array auch serialisieren, und dieses dann in der Datei abspeichern.

    Es hat sich für die von Dir vorgesehenen Zwecke eine Struktur al praktisch erwiesen:

    $_data = Array()

    $_data['nr'] = Array();
    $_data['titel'] = Array();
    $_data['inhalt'] = Array();
    $_data['genre'] = Array();
    $_data['fsk'] = Array();

    $_data['nr'][1]     = 1;
    $_data['titel'][1]  = 'Dschinghis Khan auf dem Balkan';
    $_data['inhalt'][1] = 'Ich beschreib Euch mal, was der alte Recke hier so getrieben hat...'
    $_data['genre'][1]  = 'Pseudo-Historien-Spektakel';
    $_data['fsk'][1]    = '16';

    $_data['nr'][2]     = 33;
    $_data['titel'][2]  = 'Jodeln auf der Alm';
    $_data['inhalt'][2] = 'der bescheuertste Porno seit es Fernsehen gibt'
    $_data['genre'][2]  = 'Soft Porno';
    $_data['fsk'][2]    = '18';

    usw.

    Diese Struktur hat den Vorteil, dass jede "Spalte" des Arrays für sich sortiert werden kann mit den Standard-Array-funktionen von PHP und dann sortiert bleiben kann. Wenn Du die Datei dann einliest in den Speicher sind die Datensätze (die Du dann natürlich mit einer Funktion zusammstellen musst) gleichzeitig nach allen Spalten sortiert. Du musst dann nur bestimmen, nach welcher Spalte Du auslesen willst. Das geht aber nur für Sortierung nach _einer_ Spalte. Wenn Du z.B. nach Anschaffungsdatum UND Titel sortieren willst, funtktioniert das nicht mehr.

    Ich bin gerad dabei, einen solchen Baukasten zu basteln

    https://forum.selfhtml.org/?t=161596&m=1051214
    Vielleicht magst Du Dich da ja anschließen?

    Die Speicherung in Arrays in der Datei hat aber irgendwo ihre Grenze bei ca. 500.000 Bytes Nutzdaten. Danach wird die Datei, die ja auf einmal in den Speicher geholt werden muss, irgendwann zu groß und das Ganze zu langsam. dann müsstest Du auf Random-Access-Dateien ausweichen oder gleich eine Datenbank benutzen. Davon lernt man allerdings nicht, wie ein Index gebaut wird oder was wahlfreier Zugriff ist usw...

    Harzliche Grüße vom Berg
    http://bergpost.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau
    Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)