Christian Seiler: utf-8 detection

Beitrag lesen

Hallo Dieter,

wie kann man mit PHP bei einer Datei, oder besser noch bei einem beliebigen String herausfinden, ob sie/er utf-8-encoded ist (kein BOM vorhanden).

So ohne weiteres gar nicht. Wenn keine Bytes (bzw. besserer Begriff wäre hier Oktets) mit Binärwert > 127 und keine Bytes mit < 32 vorkommen, dann hast du eine Zeichenkette, die sowohl gültiges US-ASCII, als auch gültiges UTF-8 als auch gültiges ISO-8859-1 als auch gültiges ISO-8859-2 als auch ... ist. Da hast Du keine Möglichkeit, irgend etwas festzustellen.

Wenn Bytewerte > 127 vorkommen, kannst Du überprüfen, ob korrekte UTF-Kodierung dieser Zeichen vorliegt. Dazu gibt's zahlreiche Routinen im Internet. Aber selbst dann könnte das trotzdem noch z.B. gültiges ISO-8859-1 sein, bei dem zufälligerweise eine derartige Zeichenfolge vorkommt.

Du kannst also nur feststellen, ob ein String *nicht* UTF-8 ist, d.h. sobald Du ungültige kodierte Zeichen entdeckst, kann es schonmal nicht UTF-8 sein. Falls solche Zeichen jedoch nicht vorhanden sind, d.h. alles gültiges UTF-8 wäre, dann kannst Du trotzdem nicht mit Sicherheit sagen, ob der String jetzt wirklich in UTF-8 vorliegt oder nur zufälligerweise so aussieht.

Du könntest höchstens etwas tun, wenn Du die Sprache kennst, in der das ganze geschrieben wird, dann könntest Du nach Wörtern suchen, die in der Sprache vorkommen und Multibyte-UTF8-Sequenzen enthalten, z.B. könntest Du nach »können«, »Fuß«, etc. im Deutschen suchen (natürlich mit entsprechender UTF-8-Kodierung von »ö« und »ß«) und falls so ein Wort vorhanden ist und der ganze String nicht ungültig im UTF8-Sinne ist, dann ist die Wahrscheinlichkeit sehr hoch, dass es Tatsächlich UTF-8 ist. Wenn aber jemand aus Prinzip Umlaute als ae schreibt, dann nützt das natürlich gar nichts.

Was genau willst Du denn erreichen, vielleicht gibt's ja einen anderen Weg?

Viele Grüße,
Christian

0 45

utf-8 detection

Dieter Raber
  • php
  1. 0
    Siechfred
    1. 0
      Tom
      1. 0
        Siechfred
        • menschelei
      2. 0
        Cybaer
        1. 0

          Gibt es eine utf-8 String-Klasse?

          Tom
          1. 0
            dedlfix
            1. 0
              Tom
              1. 0
                dedlfix
                1. 0
                  Tom
                  1. 0
                    Sven Rautenberg
                    1. 0
                      Tom
                  2. 0
                    dedlfix
                    1. 0
                      Tom
                      1. 0
                        dedlfix
                        1. 0
                          Tom
                          1. 0
                            Sven Rautenberg
                            1. 0
                              Tom
            2. 0
              Cybaer
              • meinung
              1. 0
                dedlfix
                1. 0

                  NORMIERUNG: Sackgasse oder Lösungsansatz?

                  Tom
                  • sonstiges
                  1. 0
                    dedlfix
                  2. 1
                    Sven Rautenberg
                    1. 0
                      Cybaer
                    2. 0

                      Wollte nicht kneifen, aber 1&1 hat "Späße" gemacht

                      Tom
                      1. 0
                        Sven Rautenberg
            3. 0
              Cybaer
              • meinung
          2. 0
            Cybaer
      3. 0
        Sven Rautenberg
        1. 0

          utf-8 Byteanzahl und Wahl des Zeichensatzes

          Tom
          1. 0
            Sven Rautenberg
            1. 0
              Tom
              1. 0
                Sven Rautenberg
                1. 0

                  Übersetzung Code -> Glyphe

                  Tom
                  1. 0
                    Sven Rautenberg
                  2. 0
                    Cybaer
                    1. 0
                      dedlfix
                      1. 0
                        Cybaer
                        • menschelei
  2. 0
    Christian Seiler
    1. 0
      Dieter Raber
  3. 0
    Tom
    1. 0
      dedlfix
  4. 0

    utf-8 detection, danke und Zusatzfrage

    Dieter Raber
    1. 0
      Tom
      1. 0
        Dieter Raber