Moin!
habe nun folgendes (Problem steht unten)
einpacken (vor dem posten):
$tmp=serialize($array);if (!$tmp){$tmp="hilfe";}
Wozu das IF? Serialize liefert dir IMMER einen String. In dem String sind IMMER Zeichen drin. Selbst bei undefinierten Variablen kriegst du den String "N;" raus.
Also schmeiß dein IF raus, es wird den Vorgang nur stören.
echo '<input type="hidden" name="unique" value="'.htmlspecialchars($tmp,ENT_QUOTES).'">';
Das ist soweit OK.
habe also
a) erst serialized dann
b) htmlspecialchars laufen lassen.
Ergebniss ist:
string(31) "a:1:{s:5:"index";s:2:"22";}"
Das kann nicht das Ergebnis sein, weil du oben ein Echo mit der Ausgabe eines Input-Feldes hingeschrieben hast. Was kommt im Browser-Quelltext an?
FRAGE:
warum ist dort ein backslash drin und nicht das html-verklauselte???
AUSPACKEN:
if (isset ($_POST["unique"]))
{
$tmp=$_POST["unique"];
Man kann es mit dem Kopieren von Variablen auch übertreiben!
$tmp2=stripslashes(htmlspecialchars_decode($tmp,ENT_QUOTES));
Niemand hat davon geschrieben, dass htmlspecialchars_decode aufzurufen ist! Die htmlspecialchars() wird vom Browser rückgängig gemacht.
stripslashes() darf nur aufgerufen werden, wenn dein Server mit der Funktion get_magic_quotes_gpc() eine 1 zurückgibt (also "true")!
echo __LINE__.' nach decode '.$tmp2.'<br>';
$uniqueidents = unserialize($tmp2);
Das sollte dann problemlos funktionieren.
if (!$uniqueidents){echo __LINE__.' unserialize nicht funk. Hilfe <br>';}
Diese Abfrage ist unsinnig. In $uniqidents kann nach der Wiederherstellung ja ein Wert enthalten sein, der nach "false" evaluiert, beispielsweise ein leeres Array.
}
2 Fragen:
A) warum enthaellt der string nach dem einpacken durch htmlspecialchars backslashs?
Unbekannt. Wie ist dein PHP konfiguriert? magic_quotes etc.
B) warum funktioniert das htmlspecialchars_decode nicht in soweit als dass das Ergebnis so aussieht wie der urspruengliche string?
Du darfst es dort ja nicht anwenden, weil der String kein HTML ist, sondern Plaintext.
- Sven Rautenberg
"Love your nation - respect the others."