如何使用 PHP 序列化数组(数组到查询字符串)

Posted

技术标签:

【中文标题】如何使用 PHP 序列化数组(数组到查询字符串)【英文标题】:How to serialize an array (array to query string) using PHP 【发布时间】:2014-02-05 23:24:29 【问题描述】:

我有一个来自 $_POST 的数据数组,我想通过 curl 将它们发送到另一个页面。

 curl_setopt($s,CURLOPT_POST,true);
 curl_setopt($s,CURLOPT_POSTFIELDS,$this->_postFields);

$this->_postFields 必须是像a=2&b=t 这样的字符串,对吗? 因此,如果我想将带有 curl 的数据数组发送到另一个页面,我必须将数组转为查询字符串吗?

我应该如何使用 php

♦我尝试了serialize()unserialize(),但它们的格式与查询字符串不同,对吧? 所以我该怎么做? (我需要像 jQuery 中的 .serialize() 这样的东西,它适用于数组而不是 FORM)

♦ 并且目标路径不在我的控制之下,并且目标中的 $_POST 应该是 $_POST 而不是它的 base64 编码,所以我不能使用这样的代码。

$array = array(1,2,3);
$encoded = json_encode($array);
$decoded = json_decode($encoded);
print_r($decoded);

有什么想法吗?

提前致谢。

【问题讨论】:

如果问题不清楚,或者即使我应该删除问题,请告诉我。而不是仅仅输入-1。再次感谢。 对于 PHP 解决方案,http_build_query() 可能会有所帮助:PHP Function To Build Query String From Array @rafaelsoufraz - 谢谢,但目标路径不在我的控制之下,目标中的 $_POST 应该是 $_POST 而不是它的 base64 编码,所以我不能使用这样的代码。` $array = 数组(1,2,3); $encoded = json_encode($array); $decoded = json_decode($encoded); print_r($decoded);` 【参考方案1】:

你可以使用http_build_query:

curl_setopt($s, CURLOPT_POSTFIELDS, http_build_query($this->_postFields));

通知

看起来很漂亮,但是使用这种方法要小心 url 编码。看下一个:

$_POST["some value"]='value1'; // " " between
$_POST["next value"]='value2'; // " " between

$url = http_build_query($_POST);

echo $url;

// OUTPUT 
some+value=value1&next+value=value2

当然,在发送这个 $url 之后,我们不会从 $_POST 中得到预期的变量。

【讨论】:

+1 谢谢。请发布完整的答案,我会接受你的 这是英语俚语,意为“意想不到的场景”【参考方案2】:

我认为你可以这样做:

curl_setopt($s, CURLOPT_POSTFIELDS, http_build_query($this->_postFields));

【讨论】:

【参考方案3】:

如果我理解,你可以使用 json。

$array = array(1,2,3);
$encoded = json_encode($array);
$decoded = json_decode($encoded);
print_r($decoded); //Look to it

如果不是,可以是:

$array = array(1,2,3);
echo http_build_query($array); //Look to it

【讨论】:

以上是关于如何使用 PHP 序列化数组(数组到查询字符串)的主要内容,如果未能解决你的问题,请参考以下文章

PHP如何将数据附加到序列化数组中

PHP数组序列化和反序列化

数组到字符串 PHP?

理解PHP数组的序列化和反序列化

如何用php直接将SQL的查询结果变成一个数组?

将 js 数组发布到 PHP 并在数据库查询中使用它