http_build_query

(PHP 5)

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

Описание

string http_build_query ( mixed $query_data [, string $numeric_prefix [, string $arg_separator [, int $enc_type = PHP_QUERY_RFC1738 ]]] )

Генерирует URL-кодированную строку запроса из предоставленного ассоциативного (или индексного) массива.

Список параметров

query_data

Может быть массивом или объектом, содержащим свойства.

Если query_data массив, то он может быть простой одномерной структурой, или массивом массивов (который, в свою очередь, может содержать другие массивы).

Если query_data объект, тогда только общедоступные (public) свойства будут включены в результат.

numeric_prefix

Если числовые индексы используются в базовом массиве и этот параметр указан, то будет добавлен числовой индекс только для элементов в базом массиве.

Это позволяет обеспечить допустимые имена переменных, в которые позже данные декодируются PHP или другим CGI приложением.

arg_separator

arg_separator.output Используется в качестве разделителя аргументов, если этот параметр указан.

enc_type

По умолчанию, PHP_QUERY_RFC1738.

Если enc_type равен PHP_QUERY_RFC1738, тогда кодирование осуществляется по » RFC 1738 и типу контента application/x-www-form-urlencoded, который подразумевает, что пробелы кодируются как символы "плюс"(+).

Если enc_type равен PHP_QUERY_RFC3986, тогда кодирование осуществляется в соответствии с » RFC 3986, и пробелы будут кодированы как %20.

Возвращаемые значения

Возвращает URL-кодированную строку.

Список изменений

Версия Описание
5.4.0 Добавлен параметр enc_type.
5.1.3 Квадратные скобки экранируются.
5.1.2 Добавлен параметр arg_separator.

Примеры

Пример #1 Простой пример использования http_build_query()

<?php
$data 
= array('foo'=>'bar',
              
'baz'=>'boom',
              
'cow'=>'milk',
              
'php'=>'hypertext processor');

echo 
http_build_query($data) . "";
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''boom''cow' => 'milk''php' =>'hypertext processor');

echo 
http_build_query($data) . "";
echo 
http_build_query($data'myvar_');
?>

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

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

Пример #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() - Применяет заданную пользователем функцию к каждому элементу массива