首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将数组作为url参数传递

将数组作为url参数传递
EN

Stack Overflow用户
提问于 2009-11-19 22:07:30
回答 8查看 308.3K关注 0票数 122

将数组作为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';
EN

回答 8

Stack Overflow用户

回答已采纳

发布于 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

票数 228
EN

Stack Overflow用户

发布于 2009-11-19 22:23:02

最简单的方法是使用serialize函数。

它序列化任何变量以进行存储或传输。您可以在php manual - serialize中阅读相关内容

可以使用unserialize恢复该变量

因此,在传递给您使用的URL时:

$url = urlencode(serialize($array))

并恢复您使用的变量

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

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

而且,这真的不是传递数据的最安全的方式!您可能应该考虑使用会话。

票数 11
EN

Stack Overflow用户

发布于 2009-11-19 22:09:44

请在输出时转义您的变量(urlencode)。

你不能仅仅打印一个数组,你必须以某种方式使用循环来构建你的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);
}
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1763508

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档