(PHP 5, PHP 7)
http_build_query — Erstellen eines URL-kodierten Query-Strings
$query_data
[, string $numeric_prefix
[, string $arg_separator
[, int $enc_type
= PHP_QUERY_RFC1738
]]] ) : stringErstellt einen URL-kodierten Query-String aus einem gegebenen assoziativen (oder indexierten) Array.
query_data
Kann ein Array oder ein Objekt sein, das Eigenschaften enthält.
Ist query_data
ein Array, kann es eine einfache eindimensionale Struktur haben, oder ein
Array aus Arrays sein (die wiederum weitere Arrays enthalten können).
Ist query_data
ein Objekt, werden nur
öffentliche Eigenschaften in das Ergebnis einbezogen.
numeric_prefix
Wenn numerische Indizes im äußeren Array verwendet werden und ein
numeric_prefix
angegeben wurde, wird dieser nur
den numerischen Schlüsseln im äußeren Array vorangestellt.
Dieser Weg wurde gewählt, um gültige Variablennamen zu erhalten, wenn die Daten später von PHP oder einer anderen CGI-Applikation dekodiert werden.
arg_separator
arg_separator.output wird verwendet, um die Argumente voneinander zu trennen, kann aber durch die Angabe dieses Parameters übersteuert werden.
enc_type
Standardmäßig PHP_QUERY_RFC1738
.
Ist enc_type
PHP_QUERY_RFC1738
, wird die Kodierung gemäß
» RFC 1738 und dem
application/x-www-form-urlencoded Media-Typ
durchgeführt, was bedeutet, dass Leerzeichen als Plus-Zeichen
(+) kodiert werden.
Ist enc_type
PHP_QUERY_RFC3986
, wird die Kodierung gemäß
» RFC 3986 durchgeführt, und
Leerzeichen werden mit einem Prozentzeichen (%20)
kodiert.
Gibt einen URL-kodierten String zurück.
Version | Beschreibung |
---|---|
5.4.0 |
enc_type -Parameter hinzugefügt.
|
5.1.3 | Eckige Klammern werden maskiert. |
5.1.2 |
arg_separator -Parameter hinzugefügt.
|
Beispiel #1 Einfache Verwendung von http_build_query()
<?php
$data = array(
'foo'=>'bar',
'baz'=>'boom',
'kuh'=>'milch',
'php'=>'hypertext processor'
);
echo http_build_query($data) . "\n";
echo http_build_query($data, '', '&');
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
foo=bar&baz=boom&kuh=milch&php=hypertext+processor foo=bar&baz=boom&kuh=milch&php=hypertext+processor
Beispiel #2 http_build_query() mit numerischen Index-Elementen.
<?php
$data = array('foo', 'bar', 'baz', 'boom', 'kuh' => 'milch', 'php' => 'hypertext processor');
echo http_build_query($data) . "\n";
echo http_build_query($data, 'meineVariable_');
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
0=foo&1=bar&2=baz&3=boom&kuh=milch&php=hypertext+processor meineVariable_0=foo&meineVariable_1=bar&meineVariable_2=baz&meineVariable_3=boom&kuh=milch&php=hypertext+processor
Beispiel #3 http_build_query() mit verschachtelten Arrays
<?php
$data = array(
'user' => array(
'name' => 'Bob Smith',
'alter' => 47,
'geschlecht' => 'M',
'geb' => '5/12/1956'
),
'hobbies' => array('golf', 'opera', 'poker', 'rap'),
'kinder' => array(
'bobby' => array('alter' => 12,'geschlecht' => 'M'),
'sally' => array('alter'=>8, 'geschlecht'=>'F')
),
'CEO'
);
echo http_build_query($data, 'flags_');
?>
Ausgabe: (für bessere Lesbarkeit umgebrochen!)
user[name]=Bob+Smith&user[alter]=47&user[geschlecht]=M&user[geb]=5%2F12%2F1956& hobbies[0]=golf&hobbies[1]=opera&hobbies[2]=poker&hobbies[3]=rap& kinder[bobby][alter]=12&kinder[bobby][geschlecht]=M&kinder[sally][alter]=8& kinder[sally][geschlecht]=F&flags_0=CEO
Hinweis:
Nur das numerische Indexelement im äußeren Array "CEO" erhält ein Prefix. Die anderen numerischen Indizes unterhalb von hobbies benötigen kein String-Prefix, um einen gültigen Variablennamen darzustellen.
Beispiel #4 Verwendung von http_build_query() mit einem Objekt
<?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);
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
pub=publicParent&pub_bar%5Bpub%5D=publicChild