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.
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.
Zur Veranschaulichung der Kodierung geben Sie in untenstehendes Eingabefeld beliebige Zeichen ein:
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 Sat Dec 21 15:08:10 2024 sieht ein solcher Zeitstempel so aus: 6766D9DA
.
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. sos@rolfrost.de.