Mit PHP unter Unicode arbeiten

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

  • Mit PHP unter Unicode arbeiten

    Hallo!

    Viele lange Jahre hat die ANSI Kodirung unter PHP ausgereicht. Doch jetzt ist es so, dass ich für eine neue Aufgabe mit Unicode irgendwie umgehen muss...

    Ich habe eine TXT Datei, die im unicode Format abgespeichert ist. Diesen würde ich gerne in ein Array unter PHP einlesen.

    Es geht mir hierbei darum, erst einmal fehlerfrei diese TXT Datei einlesen und dann darstellen zu können. Ich bevorzuge es meist, Schritt für Schritt, Zeile für Zeile zu erledigen. Später will ich die TXT Datei verarbeiten und in eine neue TXT Datei abspeichern, wieder im unicode format. Im dritten Schritt soll das Script angepasst werden und dann der Inhalt in eine MySQL Datenbank eingelesen werden, welches wiederum dann später zur Darstellung abgerufen werden wird.

    Da ich im Internet keinen weiteren Hinweis wie utf8_decode gefunden habe, welches auch nicht korrekt zu funktionieren scheint, bin ich in dieser Angelegenheit überfragt.

    Wie könnte ich dieses Problem am saubersten lösen?
    MFG
    salim_aliya
    Lesen, lernen, ausüben und Ziele erreichen...

  • #2
    Im Grunde hast du (erst mal) kein Problem. Korrekten Header gesetzt für die Ausgabe?

    PHP-Code:
    <?php

    header
    ('Content-Type: text/plain; charset=UTF-8');

    echo 
    file_get_contents('./thefile');

    Kommentar


    • #3
      Ah OK, das hat mich schon weiter gebracht. Danke

      ich habe zum Einlesen in Array file() verwendet, dies könnte als Alternative sicher her halten, oder?

      Muss ich noch weitere vorsorge treffen, um z.B. fehlerfrei die Inhalte in eine neue TXT zu speichern bzw. in mySQL?
      MFG
      salim_aliya
      Lesen, lernen, ausüben und Ziele erreichen...

      Kommentar


      • #4
        Ja, file geht auch (zumindest mit UTF-8). Wo es in PHP immer „knifflig“ wird, sind Funktionen, die mit „Zeichenpositionen“ arbeiten und die davon ausgehen, dass jedes Zeichen genau in einem Byte kodiert ist. Wenn du etwa das €-Zeichen in UTF-8 hernimmst "\xE2\x82\xAC" (drei Byte), gibt dir strlen konsequenterweise auch 3 zurück, weil es nur 1-Byte-Zeichensätze kennt. Dasselbe gilt für strpos, substr usw. Die Funktionen arbeiten alle byteweise, wohingegen die mb_*-Äquivalente zeichenweise (Character) vorgehen und auch mit verschiedenen Zeichensätzen funktionieren.

        - PHP: mb_internal_encoding - Manual

        Unproblematisch sind dagegen die Funktionen, die ohnehin mit dem gesamten String arbeiten (file_get/put_contents) oder die Funktionen, die nur auf Zeichen achten, die auch in UTF-8 so kodiert sind wie in ASCII ("\n" etwa).

        Zu MySQL siehe etwa hier:

        - UTF-8 - PHP Forum: phpforum.de

        Kommentar


        • #5
          Zitat von mermshaus Beitrag anzeigen
          Wo es in PHP immer „knifflig“ wird, sind Funktionen, die mit „Zeichenpositionen“ arbeiten und die davon ausgehen, dass jedes Zeichen genau in einem Byte kodiert ist.
          Ich glaube, ich werde damit damit schon fertig.

          Vielen Dank!
          MFG
          salim_aliya
          Lesen, lernen, ausüben und Ziele erreichen...

          Kommentar

          Lädt...
          X