Sven Rautenberg: assoziativ array und $_POST

Beitrag lesen

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."