it-swarm.com.de

Übergeben von Arrays als URL-Parameter

Wie kann ich ein Array am besten als URL-Parameter übergeben? Ich dachte, ob das möglich ist: 

$aValues = array();

$url = 'http://www.example.com?aParam='.$aValues;

oder wie wäre es damit:

$url = 'http://www.example.com?aParam[]='.$aValues;

Ich habe Beispiele gelesen, aber ich finde es unordentlich:

$url = 'http://www.example.com?aParam[]=value1&aParam[]=value2&aParam[]=value3';
96
uji

Es gibt eine sehr einfache Lösung: http_build_query() . Ihre Abfrageparameter werden als assoziatives Array verwendet:

$data = array(
    1,
    4,
    'a' => 'b',
    'c' => 'd'
);
$query = http_build_query(array('aParam' => $data));

wird zurückkehren

string(63) "aParam%5B0%5D=1&aParam%5B1%5D=4&aParam%5Ba%5D=b&aParam%5Bc%5D=d"

http_build_query() erledigt für Sie alle notwendigen Escapings (%5B => [ und %5D => ]), daher entspricht diese Zeichenfolge aParam[0]=1&aParam[1]=4&aParam[a]=b&aParam[c]=d.

197
Stefan Gehrig

Edit: Verpassen Sie nicht die oben genannte Lösung von Stefan, die die praktische http_build_query() - Funktion verwendet: https://stackoverflow.com/a/1764199/179125

knittl hat Recht auf Flucht. Es gibt jedoch einen einfacheren Weg, dies zu tun:

$url = 'http://example.com/index.php?';
$url .= 'aValues[]=' . implode('&aValues[]=', array_map('urlencode', $aValues));

Wenn Sie dies mit einem assoziativen Array tun möchten, versuchen Sie es stattdessen folgendermaßen:

PHP 5.3+ (Lambda-Funktion)

$url = 'http://example.com/index.php?';
$url .= implode('&', array_map(function($key, $val) {
    return 'aValues[' . urlencode($key) . ']=' . urlencode($val);
  },
  array_keys($aValues), $aValues)
);

PHP <5.3 (Rückruf)

function urlify($key, $val) {
  return 'aValues[' . urlencode($key) . ']=' . urlencode($val);
}

$url = 'http://example.com/index.php?';
$url .= implode('&amp;', array_map('urlify', array_keys($aValues), $aValues));
55
Jordan Running

Am einfachsten wäre es, die Funktion serialize zu verwenden.

Es serialisiert jede Variable zum Speichern oder Übertragen. Sie können darüber im php manual - serialize lesen

Die Variable kann mit unserialize wiederhergestellt werden.

Also bei der Übergabe an die URL verwenden Sie:

$url = urlencode(serialize($array))

und um die von Ihnen verwendete Variable wiederherzustellen

$var = unserialize(urldecode($_GET['array']))

Seien Sie hier jedoch vorsichtig. Die maximale Größe einer GET-Anforderung ist auf 4 KB begrenzt, die Sie leicht überschreiten können, indem Sie Arrays in einer URL übergeben.

Es ist auch nicht ganz die sicherste Art, Daten weiterzugeben! Sie sollten sich stattdessen wahrscheinlich mit der Verwendung von Sitzungen befassen.

10
nash

bitte entgehen Sie Ihren Variablen bei der Ausgabe ( urlencode ).

und Sie können nicht nur ein Array drucken, Sie müssen Ihre URL mithilfe einer Schleife erstellen

$url = 'http://example.com/index.php?'
$first = true;
foreach($aValues as $key => $value) {
  if(!$first) $url .= '&amp';
  else $first = false;
  $url .= 'aValues['.urlencode($key).']='.urlencode($value);
}
6
knittl

Ich mache dies mit serialisierter datenbank64, die verschlüsselt ist. Der beste und kleinste Weg, denke ich. Urlencode ist zu viel Platzverschwendung und Sie haben nur 4k.

3
Viktor
 <?php
$array["a"] = "Thusitha";
$array["b"] = "Sumanadasa";
$array["c"] = "Lakmal";
$array["d"] = "Nanayakkara";

$str = serialize($array);
$strenc = urlencode($str);
print $str . "\n";
print $strenc . "\n";
?> 

print $str . "\n"; gibt a:4:{s:1:"a";s:8:"Thusitha";s:1:"b";s:10:"Sumanadasa";s:1:"c";s:6:"Lakmal";s:1:"d";s:11:"Nanayakkara";} und

print $strenc . "\n"; gibt

a%3A4%3A%7Bs%3A1%3A%22a%22%3Bs%3A8%3A%22Thusitha%22%3Bs%3A1%3A%22b%22%3Bs%3A10%3A%22Sumanadasa%22%3Bs%3A1%3A%22c%22%3Bs%3A6%3A%22Lakmal%22%3Bs%3A1%3A%22d%22%3Bs%3A11%3A%22Nanayakkara%22%3B%7D

Wenn Sie diesen $array über die URL an page_no_2.php übergeben möchten, 

ex:- 

$url ='http://page_no_2.php?data=".$strenc."';

Um zum ursprünglichen Array zurückzukehren, muss es urldecode() und dann unserialize() sein, wie in page_no_2.php: 

    <?php
    $strenc2= $_GET['data'];
    $arr = unserialize(urldecode($strenc2));
    var_dump($arr);
    ?>

gibt 

 array(4) {
  ["a"]=>
  string(8) "Thusitha"
  ["b"]=>
  string(10) "Sumanadasa"
  ["c"]=>
  string(6) "Lakmal"
  ["d"]=>
  string(11) "Nanayakkara"
}

wieder: D

3

Dies ist keine direkte Antwort, da dies bereits beantwortet wurde, aber alle sprachen über das Versenden der Daten, aber niemand sagte wirklich, was Sie tun, wenn es da ist, und ich brauchte eine gute halbe Stunde, um das herauszufinden. Also dachte ich, ich würde hier helfen.

Ich werde dieses Stück wiederholen

$data = array(
'cat' => 'moggy',
'dog' => 'mutt'
);
$query = http_build_query(array('mydata' => $data));
$query=urlencode($query);

Offensichtlich würden Sie es besser formatieren als dieswww.someurl.com?x=$query

Und um die Daten zurückzubekommen

parse_str($_GET['x']);
echo $mydata['dog'];
echo $mydata['cat'];
0
Thomas Williams
**in create url page**

$data = array(
        'car' => 'Suzuki',
        'Model' => '1976'
        );
$query = http_build_query(array('myArray' => $data));
$url=urlencode($query); 

echo" <p><a href=\"index2.php?data=".$url."\"> Send </a><br /> </p>";

**in received page**

parse_str($_GET['data']);
echo $myArray['car'];
echo '<br/>';
echo $myArray['model'];
0
user2638158