传递数组作为url参数

什么是最好的方式,我可以传递一个数组作为一个URL参数? 我在想如果这是可能的:

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

或者如何呢:

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

我读过的例子,但我觉得它很凌乱:

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

提前致谢。

有一个非常简单的解决scheme: http_build_query() 。 它将您的查询参数作为关联数组:

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

将返回

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

http_build_query()处理所有必要的转义( %5B => [ and %5D => ] ),所以这个string等于aParam[0]=1&aParam[1]=4&aParam[a]=b&aParam[c]=d

编辑:不要错过上面的Stefan的解决scheme,它使用非常方便的http_build_query()函数: https : http_build_query()

knittl正在逃避。 但是,有一个更简单的方法来做到这一点:

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

如果你想用一个关联数组来做这件事,那就试试这个:

PHP 5.3+ (lambda函数)

 $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 (callback)

 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)); 

最简单的方法是使用serializefunction。

它序列化任何variables的存储或传输。 你可以阅读关于它在PHP手册 – 序列化

该variables可以通过使用反unserialize来恢复

所以在传递到你使用的URL:

$url = urlencode(serialize($array))

并恢复你使用的variables

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

不过要小心点 GET请求的最大大小限制为4k,您可以通过在URL中传递数组来轻松超过这个大小。

另外,它实际上不是最安全的方式来传递数据! 您应该考虑使用会话。

输出( urlencode )时请避开你的variables。

你不能只打印一个数组,你必须以某种方式使用循环来构build你的url

 $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); } 

我用序列化的数据base64编码。 我想是最好的最小的方法。 urlencode是浪费太多的空间,你只有4k。

  • 为什么: http : //mizine.de/html/array-ueber-get-url-parameter-uebergeben/
  • 如何: https : //gist.github.com/vdite/79919fa33a3e4fbf505c
  <?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"; 给出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";}

print $strenc . "\n";

 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 

所以如果你想通过URL传递这个$arraypage_no_2.php

例如: –

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

要返回到原始数组,它需要是urldecode() ,然后是unserialize() ,如下所示:page_no_2.php:

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

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

再次:D

这不是一个直接的答案,因为这已经被回答了,但是每个人都在谈论发送数据,但没有人真正说过你到达那里的时候做了什么,而且花了我半个小时才完成。 所以我想我会在这里帮忙。

我会重复这一点

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

显然你会比这个www.someurl.com?x=$query格式更好

并获取数据

 parse_str($_GET['x']); echo $mydata['dog']; echo $mydata['cat']; 
 **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'];