(PHP 5, PHP 7)
http_build_query — Generar una cadena de consulta codificada estilo URL
$query_data
[, string $numeric_prefix
[, string $arg_separator
[, int $enc_type
= PHP_QUERY_RFC1738
]]] ) : stringGenera una cadena de consulta codificada estilo URL a partir del array asociativo (o indexado) dado.
query_data
Puede ser un array u objeto que contenga propiedades.
Si query_data
es un array, puede ser
de una dimensión, o un array de arrays (que a su vez
puede contener otros arrays).
Si query_data
es un objeto, sólo las propiedades
que son públicas serán incorporadas en el resultado.
numeric_prefix
Si se usan índices numéricos en el array base y se provee este parámetro, éste será añadido al comienzo de los índices numéricos para aquellos elementos encontrados sólo en el array base.
Esto significa tener en cuenta los nombres de variables legales cuando los datos sean decodificados por PHP u otra aplicación CGI más adelante.
arg_separator
arg_separator.output se usa para separar argumentos, aunque podría ser sobrescrito especificando este parámetro.
enc_type
Por omisión, PHP_QUERY_RFC1738
.
Si enc_type
es
PHP_QUERY_RFC1738
, la codificación se realiza de acuerdo al
» RFC 1738 y el tipo de medios
application/x-www-form-urlencoded, lo que
implica que los espacios son codificados con el signo más (+).
Si enc_type
es
PHP_QUERY_RFC3986
, la codificación se realiza de
acuerdo al » RFC 3986, y
los espacios serán codificados (%20) más.
Devuelve una cadena codificada en forma URL.
Versión | Descripción |
---|---|
5.4.0 |
Se agregó el parámetro enc_type .
|
5.1.3 | Los corchetes cuadrados son escapados. |
5.1.2 |
Se agregó el parámetro arg_separator .
|
Ejemplo #1 Uso simple de http_build_query()
<?php
$data = array('foo'=>'bar',
'baz'=>'boom',
'cow'=>'milk',
'php'=>'hypertext processor');
echo http_build_query($data) . "\n";
echo http_build_query($data, '', '&');
?>
El resultado del ejemplo sería:
foo=bar&baz=boom&cow=milk&php=hypertext+processor foo=bar&baz=boom&cow=milk&php=hypertext+processor
Ejemplo #2 http_build_query() con elementos indexados numéricamente.
<?php
$data = array('foo', 'bar', 'baz', 'boom', 'cow' => 'milk', 'php' =>'hypertext processor');
echo http_build_query($data) . "\n";
echo http_build_query($data, 'myvar_');
?>
El resultado del ejemplo sería:
0=foo&1=bar&2=baz&3=boom&cow=milk&php=hypertext+processor myvar_0=foo&myvar_1=bar&myvar_2=baz&myvar_3=boom&cow=milk&php=hypertext+processor
Ejemplo #3 con arrays complejos http_build_query()
<?php
$data = array('user'=>array('name'=>'Bob Smith',
'age'=>47,
'sex'=>'M',
'dob'=>'5/12/1956'),
'pastimes'=>array('golf', 'opera', 'poker', 'rap'),
'children'=>array('bobby'=>array('age'=>12,
'sex'=>'M'),
'sally'=>array('age'=>8,
'sex'=>'F')),
'CEO');
echo http_build_query($data, 'flags_');
?>
esto generará la salida: (acotada por razones de legibilidad)
user%5Bname%5D=Bob+Smith&user%5Bage%5D=47&user%5Bsex%5D=M& user%5Bdob%5D=5%2F12%2F1956&pastimes%5B0%5D=golf&pastimes%5B1%5D=opera& pastimes%5B2%5D=poker&pastimes%5B3%5D=rap&children%5Bbobby%5D%5Bage%5D=12& children%5Bbobby%5D%5Bsex%5D=M&children%5Bsally%5D%5Bage%5D=8& children%5Bsally%5D%5Bsex%5D=F&flags_0=CEO
Nota:
Sólo el elemento "CEO" indexado numéricamente el array base recibió un prefijo. Los otros índices numéricos, encontrados bajo los pasatiempos, no requieren un prefijo tipo cadena para ser nombres legales de variables.
Ejemplo #4 Uso de http_build_query() con un objeto
<?php
class parentClass {
public $pub = 'publicParent';
protected $prot = 'protectedParent';
private $priv = 'privateParent';
public $pub_bar = Null;
protected $prot_bar = Null;
private $priv_bar = Null;
public function __construct(){
$this->pub_bar = new childClass();
$this->prot_bar = new childClass();
$this->priv_bar = new childClass();
}
}
class childClass {
public $pub = 'publicChild';
protected $prot = 'protectedChild';
private $priv = 'privateChild';
}
$parent = new parentClass();
echo http_build_query($parent);
?>
El resultado del ejemplo sería:
pub=publicParent&pub_bar%5Bpub%5D=publicChild