Files
php-doc-ru/reference/url/functions/http-build-query.xml
2021-11-30 13:54:17 +03:00

270 lines
9.2 KiB
XML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 06116ee1bf5f92dc34ac29849194d527e6860e21 Maintainer: aur Status: ready -->
<!-- Reviewed: no -->
<refentry xml:id="function.http-build-query" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<refnamediv>
<refname>http_build_query</refname>
<refpurpose>Генерирует URL-кодированную строку запроса</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<type>string</type><methodname>http_build_query</methodname>
<methodparam><type class="union"><type>array</type><type>object</type></type><parameter>data</parameter></methodparam>
<methodparam choice="opt"><type>string</type><parameter>numeric_prefix</parameter><initializer>""</initializer></methodparam>
<methodparam choice="opt"><type class="union"><type>string</type><type>null</type></type><parameter>arg_separator</parameter><initializer>&null;</initializer></methodparam>
<methodparam choice="opt"><type>int</type><parameter>encoding_type</parameter><initializer><constant>PHP_QUERY_RFC1738</constant></initializer></methodparam>
</methodsynopsis>
<para>
Генерирует URL-кодированную строку запроса из предоставленного ассоциативного (или
индексированного) массива.
</para>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<para>
<variablelist>
<varlistentry>
<term><parameter>data</parameter></term>
<listitem>
<para>
Может быть массив или объект, содержащий свойства.
</para>
<para>
Если <parameter>data</parameter> массив, то он может быть
простой одномерной структурой или массивом массивов (который, в свою очередь,
может содержать другие массивы).
</para>
<para>
Если <parameter>data</parameter> объект, тогда только общедоступные
свойства будут включены в результат.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>numeric_prefix</parameter></term>
<listitem>
<para>
Если числовые индексы используются в базовом массиве и этот параметр указан,
то он будет добавлен к числовому индексу для элементов только в базовом массиве.
</para>
<para>
Это позволяет обеспечить допустимые имена переменных, в которые позже данные
будут декодированы PHP или другим CGI-приложением.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>arg_separator</parameter></term>
<listitem>
<para>
<link linkend="ini.arg-separator.output">arg_separator.output</link>
используется в качестве разделителя аргументов, но может быть переопределён
путём указания этого параметра.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>encoding_type</parameter></term>
<listitem>
<para>
По умолчанию <constant>PHP_QUERY_RFC1738</constant>.
</para>
<para>
Если <parameter>encoding_type</parameter> равен <constant>PHP_QUERY_RFC1738</constant>,
тогда кодирование осуществляется по <link xlink:href="&url.rfc;1738">RFC 1738</link>
и типу контента <literal>application/x-www-form-urlencoded</literal>, что
подразумевает, что пробелы кодируются как символы "плюс" (<literal>+</literal>).
</para>
<para>
Если <parameter>enc_type</parameter> равен <constant>PHP_QUERY_RFC3986</constant>,
тогда кодирование осуществляется в соответствии с
<link xlink:href="&url.rfc;3986">RFC 3986</link>,
а пробелы будут закодированы в процентах (<literal>%20</literal>).
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
Возвращает URL-кодированную строку.
</para>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<example>
<title>Простой пример использования <function>http_build_query</function></title>
<programlisting role="php">
<![CDATA[
<?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;');
?>
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
foo=bar&baz=boom&cow=milk&php=hypertext+processor
foo=bar&amp;baz=boom&amp;cow=milk&amp;php=hypertext+processor
]]>
</screen>
</example>
<example>
<title>Пример использования <function>http_build_query</function> с числовыми индексами элементов.</title>
<programlisting role="php">
<![CDATA[
<?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_');
?>
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
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
]]>
</screen>
</example>
<example>
<title>Пример использования <function>http_build_query</function> с многомерными массивами</title>
<programlisting role="php">
<![CDATA[
<?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_');
?>
]]>
</programlisting>
<para>
Результат выполнения данных примеров: (символы перенесены для удобства чтения)
</para>
<screen>
<![CDATA[
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
]]>
</screen>
<para>
<note>
<para>
Только числовой индексированный элемент "CEO" в базовом массиве получил префикс.
Другие числовые индексы, найденные в pastimes, не требуют строкового префикса, чтобы
быть допустимыми именами переменных.
</para>
</note>
</para>
</example>
<example>
<title>Пример использования <function>http_build_query</function> с объектом</title>
<programlisting role="php">
<![CDATA[
<?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);
?>
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
pub=publicParent&pub_bar%5Bpub%5D=publicChild
]]>
</screen>
</example>
</refsect1>
<refsect1 role="seealso">
&reftitle.seealso;
<para>
<simplelist>
<member><function>parse_str</function></member>
<member><function>parse_url</function></member>
<member><function>urlencode</function></member>
<member><function>array_walk</function></member>
</simplelist>
</para>
</refsect1>
</refentry><!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->