2011-01-09 5 views
4

Ich versuche, ein Problem mit einigen (anscheinend) entstellten serialisierten Daten in einer MySQL-Datenbank nach einer Konvertierung in UTF-8 zu beheben. Wenn ich versuche, sie deserialisieren, erhalte ich die üblichen:Wie findet man Zeichen bei Byte-Offset in PHP?

Notice: unserialize() [function.unserialize]: Error at offset 1481 of 255200 bytes [...] 

Angesichts der Tatsache, dass dies ein Multi-Byte-String, kann ich nicht herausfinden, wie zu finden, welche Zeichen in dieser Byte-Offset ist. Was ich brauche, ist etwas wie substr(), aber für Bytes, anstelle von Zeichen. Wie kann ich das machen?

Vielen Dank im Voraus.

Antwort

2

Sie tun müssen, um eine substr($str, 1481, 2);, substr($str, 1481, 3); oder substr($str, 1481, 4);. Wenn es ein UTF-8 ist, wirst du es in jedem der 3 Teilstrings finden, denn ein UTF-8 Char kann abhängig vom ersten Char 2 bis 4 Zeichen lang sein.

Ich hatte eine Menge Probleme damit, wenn Sie also nicht herausfinden können, was mit der Kodierung los ist, antworten Sie noch einmal :-) Ich werde versuchen, Ihnen zu helfen.

Viel Glück!

Edit: Vergessen Sie nicht, eine Kopfzeile zu machen ("Content-type: text/html; charset = utf8"); um das Ergebnis richtig zu sehen.

+0

Danke! Ich habe dies als akzeptiert markiert, weil es korrekt ist, obwohl ich mein Problem mit der Kodierung immer noch nicht lösen kann. Der Charakter, den ich bekam, war ein griechischer but, aber selbst nachdem alle Instanzen von with durch einen lateinischen s ersetzt wurden (nur um zu testen, ob das tatsächlich das Problem war), wird der String immer noch nicht deserialisiert :(Irgendwelche Ideen? –

+0

'serialize () 'ist chaotisch Wenn Sie nur Arrays und Skalare speichern, empfehle ich Ihnen json_encode() anstelle von' serialize() 'zu verwenden –

+0

Ich stimme zu, aber ich habe die Anwendung (die meisten) nicht geschrieben und das ist eine große Veränderung An diesem Punkt. –

0

substr funktioniert auf Bytes anstelle von Zeichen. So sollte dies das 1481. Byte zurück:

substr($data, 1481, 1) 
Verwandte Themen