Quel est le meilleur moyen de passer un tableau en tant que paramètre url? Je pensais si cela est possible:
$aValues = array();
$url = 'http://www.example.com?aParam='.$aValues;
ou que diriez-vous de ceci:
$url = 'http://www.example.com?aParam[]='.$aValues;
J'ai lu des exemples, mais je trouve cela compliqué:
$url = 'http://www.example.com?aParam[]=value1&aParam[]=value2&aParam[]=value3';
Il existe une solution très simple: http_build_query()
. Il prend vos paramètres de requête comme un tableau associatif:
$data = array(
1,
4,
'a' => 'b',
'c' => 'd'
);
$query = http_build_query(array('aParam' => $data));
reviendra
string(63) "aParam%5B0%5D=1&aParam%5B1%5D=4&aParam%5Ba%5D=b&aParam%5Bc%5D=d"
http_build_query()
gère tout l'échappement nécessaire pour vous (%5B
=> [
et %5D
=> ]
), donc cette chaîne est égale à aParam[0]=1&aParam[1]=4&aParam[a]=b&aParam[c]=d
.
Edit: Ne manquez pas la solution de Stefan ci-dessus, qui utilise la très pratique http_build_query()
function: https://stackoverflow.com/a/1764199/179125
knittl a raison de s'échapper. Cependant, il existe un moyen plus simple de le faire:
$url = 'http://example.com/index.php?';
$url .= 'aValues[]=' . implode('&aValues[]=', array_map('urlencode', $aValues));
Si vous voulez faire cela avec un tableau associatif, essayez plutôt ceci:
PHP 5.3+ (fonction lambda)
$url = 'http://example.com/index.php?';
$url .= implode('&', array_map(function($key, $val) {
return 'aValues[' . urlencode($key) . ']=' . urlencode($val);
},
array_keys($aValues), $aValues)
);
PHP <5.3 (rappel)
function urlify($key, $val) {
return 'aValues[' . urlencode($key) . ']=' . urlencode($val);
}
$url = 'http://example.com/index.php?';
$url .= implode('&', array_map('urlify', array_keys($aValues), $aValues));
Le moyen le plus simple consiste à utiliser la fonction serialize
.
Il sérialise toute variable pour le stockage ou le transfert. Vous pouvez lire à ce sujet dans le manuel php - sérialiser
La variable peut être restaurée en utilisant unserialize
Donc, en passant à l'URL que vous utilisez:
$url = urlencode(serialize($array))
et pour restaurer la variable que vous utilisez
$var = unserialize(urldecode($_GET['array']))
Soyez prudent ici cependant. La taille maximale d'une demande GET est limitée à 4 Ko, ce que vous pouvez facilement dépasser en passant des tableaux dans une URL.
En outre, ce n'est vraiment pas le moyen le plus sûr de transmettre des données! Vous devriez probablement envisager d'utiliser des sessions à la place.
veuillez échapper à vos variables lors de la sortie ( urlencode
).
et vous ne pouvez pas simplement imprimer un tableau, vous devez construire votre URL en utilisant une boucle
$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);
}
Je le fais avec des données sérialisées base64 codées. Le meilleur et le plus petit moyen, je suppose. urlencode est une perte de temps considérable et vous n’avez que 4k.
<?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";
donne 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";}
et
print $strenc . "\n";
donne
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
Donc, si vous voulez transmettre ce $array
par l'URL à page_no_2.php
,
ex:-
$url ='http://page_no_2.php?data=".$strenc."';
Pour revenir au tableau d'origine, il doit s'agir de urldecode()
, puis de unserialize()
, comme ceci dans page_no_2.php:
<?php
$strenc2= $_GET['data'];
$arr = unserialize(urldecode($strenc2));
var_dump($arr);
?>
donne
array(4) {
["a"]=>
string(8) "Thusitha"
["b"]=>
string(10) "Sumanadasa"
["c"]=>
string(6) "Lakmal"
["d"]=>
string(11) "Nanayakkara"
}
encore: D
Ce n'est pas une réponse directe, car cela a déjà été répondu, mais tout le monde parlait de l'envoi des données, mais personne n'a vraiment dit ce que vous faites quand cela arrive, et il m'a fallu une bonne demi-heure pour le résoudre. Alors j'ai pensé que je pourrais aider ici.
Je vais répéter ce bit
$data = array(
'cat' => 'moggy',
'dog' => 'mutt'
);
$query = http_build_query(array('mydata' => $data));
$query=urlencode($query);
Évidemment, vous le formateriez mieux que celawww.someurl.com?x=$query
Et pour récupérer les données
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'];