我可以将数组作为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';
Stefan Gehri.. 211
有一个非常简单的解决方案: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
=> [
和%5D
=> ]
),所以这个字符串等于aParam[0]=1&aParam[1]=4&aParam[a]=b&aParam[c]=d
.
有一个非常简单的解决方案: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
=> [
和%5D
=> ]
),所以这个字符串等于aParam[0]=1&aParam[1]=4&aParam[a]=b&aParam[c]=d
.
编辑:不要错过上面的Stefan解决方案,它使用非常方便的http_build_query()
功能:https://stackoverflow.com/a/1764199/179125
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(回调)
function urlify($key, $val) { return 'aValues[' . urlencode($key) . ']=' . urlencode($val); } $url = 'http://example.com/index.php?'; $url .= implode('&', array_map('urlify', array_keys($aValues), $aValues));
最简单的方法是使用该serialize
功能.
它序列化任何变量以进行存储或传输.你可以在php手册中阅读它- serialize
可以使用恢复变量 unserialize
所以在传递给您使用的URL时:
$url = urlencode(serialize($array))
并恢复您使用的变量
$var = unserialize(urldecode($_GET['array']))
不过要小心.GET请求的最大大小限制为4k,通过在URL中传递数组可以轻松超过这个大小.
此外,它真的不是最安全的数据传递方式!您应该考虑使用会话.
请在输出(urlencode
)时转义变量.
你不能只打印一个数组,你必须以某种方式使用循环来构建你的网址
$url = 'http://example.com/index.php?' $first = true; foreach($aValues as $key => $value) { if(!$first) $url .= '&'; else $first = false; $url .= 'aValues['.urlencode($key).']='.urlencode($value); }
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
因此,如果您要将其$array
通过URL 传递给page_no_2.php
,
例如:-
$url ='http://page_no_2.php?data=".$strenc."';
要返回原始数组,它必须为urldecode()
,然后为unserialize()
,如page_no_2.php中所示:
给
array(4) { ["a"]=> string(8) "Thusitha" ["b"]=> string(10) "Sumanadasa" ["c"]=> string(6) "Lakmal" ["d"]=> string(11) "Nanayakkara" }
再次:D