Base 16, eine einfache Kodierung für Dateinamen

Mit nur 16 verschiedenen Zeichen ist Base16 ideal für plattformübergreifende Dateinamen

Soll ein File-Upload entwickelt werden, stellt sich immer die Frage der Dateinamen auf dem Webserver des Providers, denn für Dateinamen sind nur bestimmte Zeichen erlaubt und welche das sind, ist systemabhängig. Bei einem Upload jedoch geht es darum, Dateinamen festzulegen die auf jedem System passen. Eine der Möglichkeiten ist, die Dateien einfach nur durchzunumerieren, dann ist diese Bedingung erüllt, also daß die Zeichen nur ASCII sind. Eine andere Möglichkeit sei hier vorgestellt: Base 16.

Zeichen, Bytes und deren Wertigkeiten

Egal ob UTF-8, Windows-1252 oder jede andere Kodierung, in Dateinamen sind Zeichen nur Bytes mit einer Wertigkeit von 0..255. Diese Wertigkeit ist einfach nur eine Zahl die sowohl dezimal aus auch hexadezimal dargestellt werden kann. Die Zahl 127 beispielsweise lautet 7F in hexadezimaler Darstellung, wobei diese Darstellung für jede dieser Zahlen maximal 2 Zeichen aus dem Wertebereich 0..9 und A..F bzw. a..f benötigt. Dieser Umstand ist wichtig insofern als daß man die kodierten Zeichen wiederherstellen kann. Auf diese Art und Weise ist es möglich, in einem Dateinamen einen gut lesbaren Text mit Umlauten und Leerzeichen unterzubringen. Die maximal zulässige Länge für Dateinamen, i.d.R. 255 Zeichen, darf jedoch dabei nicht überschritten werden.

Demo: Base 16 Kodierung

Zur Veranschaulichung der Kodierung geben Sie in untenstehendes Eingabefeld beliebige Zeichen ein:

Zeitstempel, Datum und Uhrzeit im Dateinamen kodieren

Als ein 32-Bit-Integer hat der Zeitstempel eine Länge von 4 Byte, in Base16 sind das genau 8 Zeichen. Für das heutige Datum Fri Mar 29 05:56:33 2024 sieht ein solcher Zeitstempel so aus: 66065811.

Eine erprobte Funktion in PHP

function encode_base16( $str ){
    # Uint8Array der Bytewertigkeiten
    $uha = unpack("C*", $str);
    # Dezimal zu Hexadezimal
    $rv = "";
    foreach( $uha as $val ){
        $rv .= sprintf("%02X", $val);
    }
    return $rv;
}

echo encode_base16("ä"); # C3A4

Datenschutzerklärung: Diese Seite dient rein privaten Zwecken. Auf den für diese Domäne installierten Seiten werden grundsätzlich keine personenbezogenen Daten erhoben. Das Loggen der Zugriffe mit Ihrer Remote Adresse erfolgt beim Provider soweit das technisch erforderlich ist. s​os­@rolf­rost.de.