Sven Rautenberg: Aus ü wird ü ??

Beitrag lesen

Moin!

In der Tat hatte mehere Situationen, sei es bei der Prüfung mit
"if(is_file($file)...
oder
mkdir
oder copy usw. Probleme mit UTF8 Daten und dem Windows Dateisystem

Wenn ich konsequent mit "utf8_decode" arbeite klappt es.
z.b.
$test_dir = utf8_decode($test_dir);

Das ist aber insgesamt keine sehr gute Idee.

Woher kommen denn die Zeichen, die du da als Dateiname verwenden willst? Du darfst ja nicht einfach alle beliebigen Zeichen im Dateisystem verwenden, weil manche von denen ja ihre eigene Sonderbedeutung im Betriebssystem haben. Du musst also einen benutzerdefinierbaren Dateinamen immer auf das Vorhandensein böser Zeichen prüfen.

utf8_decode() liefert dir für alle Zeichen, die in ISO-8859-1 definiert sind, eine vernünftige Dekodierung. Da Unicode aber weit mehr Zeichen erlaubt, kriegst du für alle anderen Zeichen nur ein Fragezeichen als Rückgabewert. Das Fragezeichen hat aber im Betriebssystem u.U. Sonderbedeutung - und auch andere Zeichen, die ganz harmlos in ASCII vorkommen, will man vermutlich nicht in Dateinamen haben.

Du solltest dir also eine Funktion bauen, die dir einwandfreie ASCII-Dateinamen baut. Bestandteil dieser Funktion könnte $bettername = [link:http://docs.php.net/manual/en/function.iconv.php@title=iconv]('utf-8','ASCII//TRANSLIT', $evilname); sein. Das //TRANSLIT sorgt für eine Übersetzung von z.B. Umlauten und Euro-Zeichen in eine verfügbare Langform: Ä = AE, € = EUR, ß = ss.

Danach sollte man alle Zeichen wegfiltern, die außerhalb des sichtbaren Bereichs sind, und sich auch hinsichtlich der Sonderzeichen einschränken.

Meine Überlegung ist nun:
Wenn ich nun die ganze Webanwendung und die Datenbank auf UTF8 lasse und alle Dateisystemfunktionen anpasse ist alles ok.
Wenn nun aber irgend jemand später mal sagt. "Wir machen wieder alles auf latin1" oder ISO-8859-1" würde man ja die "utf8_decode" Funktionen nicht brauchen.

Sowas wird nie einer sagen. :)

Naja, klar dass du in diesem Fall die Funktion zum Bereinigen des Dateinamens anpassen musst, aber da du die ja einmal zentral definiert hast und überall zum Generieren eines gereinigten Dateinamens verwendest, passt du in diesem Fall einfach nur die Angabe des Input-Encodings von UTF-8 auf das neue Encoding an.

Wäre es nun gut, vorher zu prüfen ob ein String in UTF8 vorliegt (geht das überhaupt?) oder ob es codierte Zeichen enthält? Wenn ja, dann "utf8_decode" einsetzen.

Man kann das nicht prüfen, man muss es wissen. Woher man das weiß - weil man es so definiert hat, oder weil es bei den Daten dabeistand, die man empfangen hat,

Oder wäre es egal, wenn "utf8_decode" eingesetzt wird auch wenn alles auf latin1 bzw. ISO-8859-1 ist?

Nein, das zerstört dir den String.

- Sven Rautenberg

0 63

Umstellung auf UTF8 gelungen?

hawkmaster
  • datenbank
  1. 0
    hotti
    1. 0
      hawkmaster
      1. 0
        Tom
        1. 0
          hawkmaster
          1. 0
            Tom
            1. 0
              hawkmaster
              1. 0
                Tom
                1. 0
                  hawkmaster
                  1. 0
                    dedlfix
                    1. 0
                      hawkmaster
                      1. 0
                        dedlfix
                        1. 0
                          hawkmaster
                          1. 0
                            dedlfix
                            1. 0

                              Aus ü wird ü ??

                              hawkmaster
                              1. 0
                                dedlfix
                                1. 0
                                  hawkmaster
                                  1. 0
                                    dedlfix
                                    1. 0
                                      hawkmaster
                                      1. 0
                                        dedlfix
                                        1. 0

                                          vielleicht auch nur ein Bug?

                                          hawkmaster
                                          1. 0
                                            Sven Rautenberg
                                            1. 0
                                              hawkmaster
                                              1. 0
                                                Sven Rautenberg
                                          2. 0
                                            dedlfix
                                      2. 0
                                        Tom
                                        1. 0
                                          hawkmaster
                                          1. 0
                                            Tom
                                        2. 0
                                          Sven Rautenberg
                                    2. 0
                                      Tom
                                      1. 0
                                        dedlfix
                                    3. 0
                                      hawkmaster
                                      1. 0
                                        Tom
                                        1. 0

                                          UTF8 erkennen, mb_internal_encoding() ?

                                          hawkmaster
                                          1. 1

                                            Zugriff über den Index-Operator auf einen UTF-8-String?

                                            Tom
                                            1. 0
                                              Sven Rautenberg
                                              1. 0
                                                hawkmaster
                                                1. 2
                                                  Sven Rautenberg
                                                  1. 0
                                                    Christian Kruse
                                              2. 0
                                                Tom
                                      2. 0
                                        Sven Rautenberg
                            2. 0
                              Tom
                              1. 0
                                dedlfix
                                1. 0

                                  TOM und ТОМ

                                  Tom
                                  • menschelei
                              2. 0
                                Der Martin
                                1. 0
                                  at
                  2. 0
                    Tom
                    1. 0
                      hawkmaster
          2. 0
            hotti
  2. 0
    Harlequin
    1. 0
      hawkmaster
      1. 0
        Harlequin
    2. 0
      Tom
      1. 0
        Harlequin
        1. 0
          Tom
  3. 0
    Tom
    1. 0
      hawkmaster
      1. 0
        Tom
        1. 0
          hawkmaster
          1. 0
            Tom
  4. 0

    str_pad() multibyte?

    hawkmaster
    1. 0
      Tom
    2. 0
      Sven Rautenberg