酒量大的小蝌蚪 · java唯一索引冲突是什么异常_mob64c ...· 2 月前 · |
酷酷的日光灯 · 解决Windows ...· 8 月前 · |
任性的青蛙 · Spring ...· 1 年前 · |
微醺的凉茶 · Python输出还可以这么花里胡哨,这个第三 ...· 1 年前 · |
温暖的遥控器 · js获取mac地址(续) - ...· 1 年前 · |
将数组作为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';
请在输出时转义您的变量(
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);
}
最简单的方法是使用
serialize
函数。
它序列化任何变量以进行存储或传输。您可以在 php manual - serialize 中阅读相关内容
可以使用
unserialize
恢复该变量
因此,在传递给您使用的URL时:
$url = urlencode(serialize($array))
并恢复您使用的变量
$var = unserialize(urldecode($_GET['array']))
不过,在这里要小心。GET请求的最大大小限制为4k,您可以通过在URL中传递数组来轻松超过此大小。
而且,这真的不是传递数据的最安全的方式!您可能应该考虑使用会话。
有一个非常简单的解决方案:
http_build_query()
。它将您的查询参数作为关联数组:
$data = array(
'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";
给出
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将此
$array
传递给
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
这不是一个直接的答案,因为这个问题已经得到了回答,但是每个人都在谈论发送数据,但是没有人真正说出你在那里做了什么,我花了整整半个小时才弄明白。所以我想我可以帮上忙。
我将重复这一点
$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'];
在接收到的页面中,您可以使用:
parse_str($str,$array);var_dump($array);
将数组作为参数发送非常容易。
User
serialize
函数,如下所述
$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>';