[Problem] Unserialize

Kopfballstar

Erfahrenes Mitglied
Hallo

wie im Titel geschrieben, habe ich ein Problem mit der Funktion unserialize();
Ich bekomme bei manchen Strings die bekannte Fehlermeldung "unserialize(): Error at offset XX of XX bytes", nur kann ich im String keine mögliche Fehlerursache entdecken. Die Strings sind simpel.

Ein Beispiel (Lt. E_NOTICE liegt der Fehler bei Füllerpatrone):

a:3:{s:12:"control";s:2:"Yes";s:6:"test";s:14:"Füllerpatrone";s:7:"contact";N;}

Hat jemand vielleicht eine Idee was dort schief läuft?
 
Code:
Hat jemand vielleicht eine Idee was dort schief läuft?

Mmmh, um mal einen Friseur aus meiner Kindheit zu zitieren:
Da hatte jemand seine unegalen Finger dran
:-)

So sollte dieser String korrekt aussehen:
Code:
a:3:{s:7:"control";s:3:"Yes";s:4:"test";s:13:"Füllerpatrone";s:7:"contact";N;}

a:3 bedeutet: ein Array mit 3 Elementen(das ist korrekt so)

danach kommen immer abwechselnd key und value.

s:7:"control" bedeutet, in String-Key der aus 7 Zeichen besteht
s:3:"Yes" ....der Wert dieses Array-Elementes ist ein String mit 3 Zeichen

Warum da diese Fehlermeldung kommt, sollte jetzt einleuchten, die länge der Strings stimmt bei dir nicht.
Beim " nach control ensteht der Fehler, s:12 sagt, der String hat 12 Zeichen, da kommt aber keines mehr, weil control nur aus 7 Zeichen besteht.

Die Fehlermeldung dürfte Byte23 als Fundstelle melden, also das letzte Zeichen hiervon:
Code:
a:3:{s:12:"control";s:2
Warum:
s:12 sagt, der String ist 12 Zeichen lang, die werden also gelesen.

Code:
control";s:2
...Fehler!
 
Hallo,

sorry, ich hatte die Werte geändert weil es firmenintern ist. Das war natürlich total dämlich von mir. Der richtige String lautet:

a:3:{s:12:"satisfaction";s:2:"Ja";s:6:"remark";s:14:"Füllerpatronen";s:7:"contact";N;}

Dort passt es natürlich mit den Längen. Es kann also nicht daran liegen
 
Ich würde mal vermuten, dass der String UTF8-codiert ist.
Dort belegt das ü 2 Bytes....womit die Länge von Füllerpatronen nicht stimmt.

Lösung: konvertiere den String vorher per utf8_decode() nach Latin1
 
Hallo,

das fällt leider auch weg. Der String ist in Latin1.
Außerdem ist auch ein Datensätz ohne Umlaut und korrekter Stringlänge der ein Problem bereitet:

"tintenpatronen für brother mfc 490 cw"

Hast du vielleicht noch eine Idee?
 
Jo, du könntest zur Abwechslung mal das wirklich fehlerhafte Posten, statt irgendwas erfundenes:confused:

Andernfalls müsstest du es auf dem Jahrmarkt bei der Frau mit der Kristallkugel versuchen;-]
 
Nein nein, das kam jetzt falsch rüber. Ich habe mehrere Datensätze wo das Problem auftritt. Dieser hier ist ebenfalls richtig, aber eben ohne Umlaute.
 
Zurück