Ik heb een unserialize routine die een fout geeft. Het gekke is dat de aangegeven positie bijna aan het eind van de string is. Er zit een \r\n in de tekst, ik wel eens gelezen dat dit een probleem kan opleveren. Echter de routine heb ik uit een cms gecopieerd waar de code goed werkt. Enig idee wat hier het probleem kan zijn, of hoe ik er achter kan komen waarom unserialize niet werkt?
Heb je de string die je unserialized gekopieerd en geplakt oid? Of heb je het bestand waar die in staat een keer opnieuw opgeslagen? Volgens mij werkt serialize door het aantal karakters dat volgt eerst te noemen. Als er dan meer karakters volgen dan dat hij verwacht, gaat het mis. Als je een reeks met \n kopieert, en die reeks door notepad oid wordt opgeslagen met \r\n als enters, klopt het aantal karakters niet meer.
Als je speciale karakters (zoals \n, maar ook karakters die niet binnen het normale a-z0-9 vallen) veilig wilt kunnen kopiƫren, kan je base64_encode en decode gebruiken. Je data wordt er wel iets groter door (20%?) maar het heeft geen last van verschillen in line-endings en character encoding.
Bedankt voor het antwoord. Maar: Nee, de data staat in een mySQL database. Na inlezen van de string gaat unserialize fout terwijl de routine (die gecopieerd is uit e107) wel werkt. Ik heb met phpEd de inhoud vanb de variabele gecopieerd naar notepad++ omdat de totale lengte van de string niet in de debugger getoond wordt. Als je het aantal karakters gaat tellen kom je niet uit, maar kom wel fysieke \r\n tekens tegen Wellicht dat ik iets richting de database fout doe want ik wil gewoon de fysieke data hebben. Ik heb de draadjes van de encoding wel gelezen, maar het is e107 die het in de database stopt en er ook weer goed uithaalt. Maar dat laatste lukt mij met dezelfde routine dus niet....
albert
[size=xsmall]Toevoeging op 23/04/2011 22:15:30:[/size]
Het probleem is opgelost. UTF8Encode in PHP wijkt blijkbaar af van de encoding door MySQL. Nadat ik Mysql in utf8 modus had gezet en de encoding had verwijderd uit de php code werkte het wel....