Unserialize manchmal gibt false zurück

Habe ich diese Funktion in meine Anwendung:

public function direct($theTree)
{
    $aTreeRoot = preg_replace('!s:(\d+):"(.*?)";!se', "'s:'.strlen('$2').':\"$2\";'", $theTree);
    return unserialize($aTreeRoot);
}

Sollte es nie false zurückgeben, aber in den error-logs die Fehler halten, auftreten, die sagt, dass es falsch zurückgegeben.

Kann ich jedoch nicht replizieren den Fehler in meiner Anwendung. Ich werde versuchen, jede mögliche Weg, aber es funktioniert immer.

Gibt es etwas falsch mit der Funktion?

Den $theTree kommt von der Sitzung.

Edit: Das regex ist es da: unserialize - Suche für meine regex, die es in die Kommentare. Es soll um ein problem zu lösen.

Ist dies preg_replacing wirklich notwendig? Das Beispiel dieser Igor Charakter gibt, der dazu aufgefordert diese Problemumgehung ist eine völlig ungültige serialisierte Zeichenfolge zu beginnen. Ich bin mir nicht bewusst, irgendwelche bugs erfordern würde. Wenn Ihr string serialisiert wurde mit serialize war und nicht geändert, es sollte unserialize gut. Hast du dieses problem selbst, oder hast du Sie einfach legen Sie es in "weil es eigentlich zu lösen ein - problem"?
Ja, ohne, dass die regex die unserialize funktioniert nicht. Ich bin putting ein kompliziertes Objekt in die session serialisiert und ohne regex gibt es Probleme Deserialisieren von es. Die regex löst das problem aber immer noch, es scheint unserialize manchmal gibt false zurück.
Dreifach-check, dass Ihre serialisierte Zeichenfolge wird nicht abholen keine zusätzlichen Zeichen auf dem Weg irgendwo, änderungen der Codierung usw.. Können Sie ein Beispiel geben, dass es nicht?
Ich bin converting-string von Windows-1250 UTF-8 nach serialisieren. Nicht sicher, ob das ist significiant.
und Fenster-1250 ist nicht eine direkte Teilmenge von UTF-8. einige Charakter verpassen könnte in der Codierung. Also, versuchen Sie mit einfachen Zeichen der ersten.

InformationsquelleAutor Richard Knop | 2010-11-24

Schreibe einen Kommentar