将数组作为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';
发布于 2009-11-19 23:42:40
有一个非常简单的解决方案: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
。
发布于 2009-11-19 22:23:02
最简单的方法是使用serialize
函数。
它序列化任何变量以进行存储或传输。您可以在php manual - serialize中阅读相关内容
可以使用unserialize
恢复该变量
因此,在传递给您使用的URL时:
$url = urlencode(serialize($array))
并恢复您使用的变量
$var = unserialize(urldecode($_GET['array']))
不过,在这里要小心。GET请求的最大大小限制为4k,您可以通过在URL中传递数组来轻松超过此大小。
而且,这真的不是传递数据的最安全的方式!您可能应该考虑使用会话。
发布于 2009-11-19 22:09:44
请在输出时转义您的变量(urlencode
)。
你不能仅仅打印一个数组,你必须以某种方式使用循环来构建你的url。
$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);
}
https://stackoverflow.com/questions/1763508
复制相似问题