http_build_query

(PHP 5, PHP 7, PHP 8)

http_build_queryГенерирует URL-кодированную строку запроса

Описание

http_build_query(
    array|object $data,
    string $numeric_prefix = "",
    ?string $arg_separator = null,
    int $encoding_type = PHP_QUERY_RFC1738
): string

Генерирует 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, '', '&amp;');

?>

Результат выполнения приведённого примера:

foo=bar&baz=boom&cow=milk&php=hypertext+processor
foo=bar&amp;baz=boom&amp;cow=milk&amp;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

Смотрите также

  • parse_str() - Разбирает строку в переменные
  • parse_url() - Разбирает URL и возвращает его компоненты
  • urlencode() - URL-кодирует строку
  • array_walk() - Применяет заданную пользователем функцию к каждому элементу массива