Passing arrays as url parameter

传递数组作为 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';
331426 次浏览

输出时请转义你的变量(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);
}

Easiest way would be to use the serialize function.

它序列化任何用于存储或传输的变量

可以使用 unserialize还原变量

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

$url = urlencode(serialize($array))

并恢复您使用的变量

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

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

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

编辑: 不要错过 Stefan 上面的解决方案,它使用了非常方便的 http_build_query()函数: < a href = “ https://stackoverflow. com/a/1764199/179125”> https://stackoverflow.com/a/1764199/179125

但是,有一个更简单的方法可以做到这一点:

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

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

PHP 5.3 + (lambda 函数)

$url = 'http://example.com/index.php?';
$url .= implode('&amp;', 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('&amp;', array_map('urlify', array_keys($aValues), $aValues));

有一个非常简单的解决方案: 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

 <?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"; gives

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 中所示:

    <?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

我使用编码的序列化数据库64完成此操作。最好最小的方法,我猜。Urlencode 太浪费空间了,而你只有4k。

这并不是一个直接的答案,因为这个问题已经得到了回答,但是每个人都在谈论发送数据,但是没有人真正说过当数据到达那里的时候你要做什么,我花了足足半个小时来解决这个问题。所以我想我可以帮忙。

我再重复一遍

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

显然你会格式化它比这更好 翻译: 奇芳校对: 奇芳校对: 奇芳校对: 奇芳校对: 奇芳校对: 奇芳校对: 奇芳校对: 奇芳校对: 奇芳校对: 奇芳校对: 奇芳校对: 奇芳校对: 奇芳校对: 奇芳校对: 奇芳校对: 奇芳校对: 奇

And to get the data back

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'];

in the received page you can use:

Parse _ str ($str,$array) ; Var _ dump ($array) ;

你可以把 密码Json _ encode结合起来

例如:

<?php


$cars = array
(
[0] => array
(
[color] => "red",
[name] => "mustang",
[years] => 1969
),


[1] => array
(
[color] => "gray",
[name] => "audi TT",
[years] => 1998
)


)


echo "<img src='your_api_url.php?cars=" . urlencode(json_encode($cars)) . "'/>"


?>

Good luck ! 🐘

很容易将数组作为参数发送。

User serialize function as explained below

$url = www.example.com


$array = array("a" => 1, "b" => 2, "c" => 3);

将数组作为参数发送

$url?array=urlencode(serialize($array));

要获取函数或其他方面的参数,请使用 unserialize

$param = unserialize(urldecode($_GET['array']));


echo '<pre>';
print_r($param);
echo '</pre>';


Array
(
[a] => 1
[b] => 2
[c] => 3
)