(PHP 5, PHP 7, PHP 8)
http_build_query — Генерирует URL-кодированную строку запроса
$data
,$numeric_prefix
= "",$arg_separator
= null
,$encoding_type
= PHP_QUERY_RFC1738
Генерирует URL-кодированную строку запроса из предоставленного ассоциативного (или индексированного) массива.
data
Может быть массив или объект, содержащий свойства.
Если data
массив, то он может быть
простой одномерной структурой или массивом массивов (который, в свою очередь,
может содержать другие массивы).
Если data
объект, тогда только общедоступные
свойства будут включены в результат.
numeric_prefix
Если числовые индексы используются в базовом массиве и этот параметр указан, то он будет добавлен к числовому индексу для элементов только в базовом массиве.
Это позволяет обеспечить допустимые имена переменных, в которые позже данные будут декодированы PHP или другим CGI-приложением.
arg_separator
Разделитель аргументов. Если не задан или null
, то для разделения аргументов
используется arg_separator.output.
encoding_type
По умолчанию PHP_QUERY_RFC1738
.
Если encoding_type
равен PHP_QUERY_RFC1738
,
тогда кодирование осуществляется по » RFC 1738
и типу контента application/x-www-form-urlencoded
, что
подразумевает, что пробелы кодируются как символы "плюс" (+
).
Если enc_type
равен PHP_QUERY_RFC3986
,
тогда кодирование осуществляется в соответствии с
» RFC 3986,
а пробелы будут закодированы в процентах (%20
).
Возвращает URL-кодированную строку.
Версия | Описание |
---|---|
8.0.0 |
Параметр arg_separator теперь допускает значение null .
|
Пример #1 Простой пример использования http_build_query()
<?php
$data = array(
'foo' => 'bar',
'baz' => 'boom',
'cow' => 'milk',
'null' => null,
'php' => 'hypertext processor'
);
echo http_build_query($data) . "\n";
echo http_build_query($data, '', '&');
?>
Результат выполнения приведённого примера:
foo=bar&baz=boom&cow=milk&php=hypertext+processor foo=bar&baz=boom&cow=milk&php=hypertext+processor
Пример #2 Пример использования http_build_query() с числовыми индексами элементов.
<?php
$data = array('foo', 'bar', 'baz', null, 'boom', 'cow' => 'milk', 'php' => 'hypertext processor');
echo http_build_query($data) . "\n";
echo http_build_query($data, 'myvar_');
?>
Результат выполнения приведённого примера:
0=foo&1=bar&2=baz&4=boom&cow=milk&php=hypertext+processor myvar_0=foo&myvar_1=bar&myvar_2=baz&myvar_4=boom&cow=milk&php=hypertext+processor
Пример #3 Пример использования 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_');
?>
Результат выполнения данных примеров: (символы перенесены для удобства чтения)
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
Замечание:
Только числовой индексированный элемент "CEO" в базовом массиве получил префикс. Другие числовые индексы, найденные в pastimes, не требуют строкового префикса, чтобы быть допустимыми именами переменных.
Пример #4 Пример использования http_build_query() с объектом
<?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);
?>
Результат выполнения приведённого примера:
pub=publicParent&pub_bar%5Bpub%5D=publicChild