Ein Array über GET URL Parameter übergeben

Um ein Array oder ein Objekt über $_GET Parameter zu übergeben, lässt sich das Array am einfachsten serialisieren und dann mit base64 kodieren. Auf diese Weise kann es in keinem Browser zu einem Problem mit dem Objekt kommen.

<?php
/* array_over_get.php */
$image_arr=array("1.jpg","2.jpg","3.jpg","4.jpg","5.jpg","6.jpg");
$serial_arr=urlencode(base64_encode(serialize($image_arr)));

echo '<img src="process_images.php?arr='.$serial_arr.'" alt="stacked image"/>';
?>


<?php
/* process_images.php */
$image_arr=unserialize(base64_decode(urldecode($_GET['arr'])));

foreach($image_arr as $value){
   /* do anything here 
    * just as an example
    * https://gist.github.com/vdite/30644e28301916789ff5
    */
}
?>

Be careful here though. The maximum size of a GET request is limited to 4k, which you can easily exceed by passing arrays in a URL. ~ nash @stackoverflow

Warum nutze ich das base64 encoding? URLencode an sich ist eine große Platzverschwendung! Beispielsweise werden aus einem Zeichen drei – und wir haben ja nur 4k Platz. Verwendete man base64 allein, bliebe ein Problem mit drei Zeichen, die in der URL eine spezielle Funktion haben: +=/
Diese werden dann halt doch noch mit urlencode in valide Zeichen übersetzt. So spart man also Platz und ist dennoch auf der sicheren Seite!

Vielen Dank an Hannes Peterseim für den Tip mit der Base64 Kodierung!

Autor: Viktor Dite

Veröffentlicht am: 07.05.2014

Letztes Update: 25.08.2020

4 Kommentare