Array zwischen html-Dateien transportieren (serialize und urlencode)

Array zwischen html-Dateien transportieren (serialize und urlencode)

am 04.08.2006 13:05:42 von Phil Kaltner

Hi,

ich versuche, ein Array mittels serialize und urlencode
zu übergeben, was nicht klappt. Dazu habe ich ein
minimales Testprogramm geschrieben.

1) In der Version unten habe ich an zwei Stellen sonderbare
Ausgaben, s. Kommentare. Wo kommen die her?
2) Wenn ich die Zeile (*) wieder einkommentiere, habe ich
nach urldecode nicht das gewünschte Ergebnis:
Statt a:2:{s:4:"Name";s:4:"Paul";s:3:"Ort";s:4:"hier";}
ist da a:2:{s:4:\"Name\";s:4:\"Paul\";s:3:\"Ort\";s:4:\"hier\";}.
Ist url(en|de)code nicht bijektiv? Wo ist der Fehler?


Danke,
Phil



-------------------------
Der Code:
echo "";

// ===================3D Feld erstel=
len
$feld=3Darray('Name' =3D> 'Paul', 'Ort' =3D> 'hier');
echo "\n
Wir haben ein Feld definiert:\n
";
print_r($feld);

$feld =3D serialize($feld);
echo "\n
Das serialisieren wir: ".$feld;

$feld =3D urlencode($feld);
echo "\n
Das urlencoden wir ()=
:
".$feld;

// ===================3D Feld direkt=
auswerten
echo "\n\n\n\n\n


\n\n\n\n";

$feld =3D urldecode($feld);
echo "\n
Das urldeencoden wir: ".$feld;

$feld =3D unserialize($feld);
echo "\n
Das unserialisieren wir: ".$feld;
// Hier kommt die Ausgabe:
//
Das unserialisieren wir: ArrayArray
// (
// [Name] =3D> Paul
// [Ort] =3D> hier
// )
// Sa steht: ArrayArray

echo "\n
print_r liefert: ";
print_r($feld);


// ===================3D Feld aus $_R=
EQUEST auswerten
$feld =3D $_REQUEST['feld'];
echo "\n\n\n\n\n

\n\n\n\n";

echo "\n
Wir haben ein Feld übergeben bekommen: ".$feld;

$feld =3D urldecode($feld);
echo "\n
Das urldeencoden wir: ".$feld;

//$feld =3D unserialize($feld); // Zeile (*)
echo "\n
Das unserialisieren wir: ".$feld;
// Wenn (*) auskommentiert ist, erhalte ich in
// der vorigen Zeile ist die Ausgabe:
// Das unserialisieren wir:
a:2:{s:4:\"Name\";s:4:\"Paul\";s:3:\"Ort\";s:4:\"hier\";}a:2 :{s:4:\"Name\=
";s:4:\"Paul\";s:3:\"Ort\";s:4:\"hier\";}
// Das Array wird also zweimal ausgegeben.

echo "\n
print_r liefert: ";
print_r($feld);

echo "";
?>


















Die Ausgabe:
-----------------------------


Wir haben ein Feld definiert:

Array
(
[Name] =3D> Paul
[Ort] =3D> hier
)


Das serialisieren wir: a:2:{s:4:"Name";s:4:"Paul";s:3:"Ort";s:4:"hier=
";}

Das urlencoden wir ( href=3D"?feld=3Da%3A2%3A%7Bs%3A4%3A%22Name%22%3Bs%3A4%3A%22P aul%22%3Bs%3A=
3%3A%22Ort%22%3Bs%3A4%3A%22hier%22%3B%7D">Link):
a%3A2%3A%7Bs%3A4%3A%22Name%22%3Bs%3A4%3A%22Paul%22%3Bs%3A3%3 A%22Ort%22%3=
Bs%3A4%3A%22hier%22%3B%7D












Das urldeencoden wir: a:2:{s:4:"Name";s:4:"Paul";s:3:"Ort";s:4:"hier"=
;}

Das unserialisieren wir: Array

print_r liefert: Array
(
[Name] =3D> Paul
[Ort] =3D> hier
)












Wir haben ein Feld übergeben bekommen:
a:2:{s:4:\"Name\";s:4:\"Paul\";s:3:\"Ort\";s:4:\"hier\";}

Das urldeencoden wir:
a:2:{s:4:\"Name\";s:4:\"Paul\";s:3:\"Ort\";s:4:\"hier\";}

Das unserialisieren wir:
a:2:{s:4:\"Name\";s:4:\"Paul\";s:3:\"Ort\";s:4:\"hier\";}

print_r liefert:
a:2:{s:4:\"Name\";s:4:\"Paul\";s:3:\"Ort\";s:4:\"hier\";}

Re: Array zwischen html-Dateien transportieren (serialize und urlencode)

am 04.08.2006 14:38:33 von Sven Drieling

Phil Kaltner wrote:

Hallo,

> ist da a:2:{s:4:\"Name\";s:4:\"Paul\";s:3:\"Ort\";s:4:\"hier\";}.

16.13. Wieso wird aus " plötzlich \" und wie geht das wieder weg?
http://www.php-faq.de/q/q-magic-quotes.html


> echo "\n
Das urlencoden wir (Link<=
/a>):

(X)HTML-Attribute dürfen auch von '' umschlossen werden, dass macht
den PHP-Quelltext besser lesbar.
=20
echo "";
echo '';
echo "";


tschuess
[|8:)
--=20
PHP 5: Hilfreiche Fehlermeldungen mit odebugger von Johan Barbier
http://www.sven-drieling.de/diary/2006/07/05/PHP_odebugger.h tml

Re: Array zwischen html-Dateien transportieren (serialize und urlencode)

am 06.08.2006 13:24:41 von Phil Kaltner

Hi Sven,


Danke!

Besonders:


> (X)HTML-Attribute dürfen auch von '' umschlossen werden, dass macht
> den PHP-Quelltext besser lesbar.


Gruß, Phil