binäre Datei in Zeichenkette wandlen?
Jannes
- php
0 Multi0 Sven Rautenberg0 Jannes
Hallo zusammen,
ich möchte eine Datei mit Photoshop-Einstellungen nach einer Zeichenkette durchsuchen (Adobe Photoshop CS3 Prefs.psp). Die Datei ist ein Binärformat mit Null-Charakter soweit ich das beurteilen kann. Wie bekomme ich daraus eine 'echte Zeichenkette' ohne Null-Charakter und evtl. andere 'binäre Zeichen', so das ich darin nach einer Zeichenkette suchen kann?
Eine erste Idee ist, die Datei stückchenweise oder im Ganzen in einen Puffer zu lesen, und alle NULLEN daraus zu entfernen, vielleicht reicht das ja schon aus für meinen Zweck. Kann man das mit str_replace()? Wenn ja, wie definiere ich die binäre null?
Gruß,
Jannes
Wie bekomme ich daraus eine 'echte Zeichenkette' ohne Null-Charakter und evtl. andere 'binäre Zeichen', so das ich darin nach einer Zeichenkette suchen kann?
Dazu musst du den Aufbau der Datei kennen.
Ein reines umwandeln in ASCII oder Plaintext macht wenig Sinn, da dann immer noch Buchstabensalat rauskommen wird.
Du brauchst das Speicherformat um es dann quasi zu dekodieren.
Moin!
Hallo zusammen,
ich möchte eine Datei mit Photoshop-Einstellungen nach einer Zeichenkette durchsuchen (Adobe Photoshop CS3 Prefs.psp). Die Datei ist ein Binärformat mit Null-Charakter soweit ich das beurteilen kann. Wie bekomme ich daraus eine 'echte Zeichenkette' ohne Null-Charakter und evtl. andere 'binäre Zeichen', so das ich darin nach einer Zeichenkette suchen kann?
Ich sehe das Problem nicht.
file_get_contents() packt die Datei in eine Variable, und strpos() sucht dann in dem String nach dem Vorkommen.
Keine der zwei Funktionen hat in ihrer Beschreibung vermerkt, dass Null- oder sonstige Bytes ein Problem darstellen würden.
Eine erste Idee ist, die Datei stückchenweise oder im Ganzen in einen Puffer zu lesen, und alle NULLEN daraus zu entfernen, vielleicht reicht das ja schon aus für meinen Zweck. Kann man das mit str_replace()? Wenn ja, wie definiere ich die binäre null?
Ich denke nicht, dass es dir etwas bringen würde, die Datei zu modifizieren. Was willst du dadurch erreichen? Um den Dateiinhalt sinnvoll ausgeben zu können musst du das Dateiformat kennen. Nur dann kannst du sinnlose Bytes einfach ignorieren und sinnbehaftete Bytes gemäß ihrer Bedeutung interpretieren.
- Sven Rautenberg
Hallo zusammen,
Ich sehe das Problem nicht.
file_get_contents() packt die Datei in eine Variable, und strpos() sucht dann in dem String nach dem Vorkommen.
Keine der zwei Funktionen hat in ihrer Beschreibung vermerkt, dass Null- oder sonstige Bytes ein Problem darstellen würden.
Das Problem ist, das (fast) alle Zeichenketten nach jedem Zeichen von einem Nullzeichen gefolgt sind. Ich weiß das noch von früheren Experimenten in VB6. Wenn man von direkten API-Calls Strings zurück bekam mußten diese auch von diesen NULLEN bereinigt werden, bevor damit etwas anzufangen war.
$data = file_get_contents($file);
var_dump(strpos($data,'ZEICHENKETTE'));
// ergibt false, da nur Z.E.I.C.H.E.N.K.E.T.T.E in $data vorhanden ist,
// . = NULLZEICHEN
$data = str_replace(chr(0),'',$data);
var_dump(strpos($data,'ZEICHENKETTE'));
// ergibt z.B. int(743), wenn ZEICHENKETTE vorhanden ist
Mehr wollte ich gar nicht wissen. Was mir fehlte war, das CHR(0) das binäre NULLZEICHEN zurückgibt das ich löschen wollte (nur im Puffer, nicht in der Datei), um den Puffer durchsuchen zu können.
Viele Grüße,
Jannes
Hallo,
Das Problem ist, das (fast) alle Zeichenketten nach jedem Zeichen von einem Nullzeichen gefolgt sind. Ich weiß das noch von früheren Experimenten in VB6. Wenn man von direkten API-Calls Strings zurück bekam mußten diese auch von diesen NULLEN bereinigt werden, bevor damit etwas anzufangen war.
Windows-NT-ähnliche Betriebssysteme nutzen UCS-2, siehe auch "What's the difference between UCS-2 and UTF-16?".
Freundliche Grüße
Vinzenz