1
0
mirror of https://github.com/php/doc-ru.git synced 2026-03-26 00:32:15 +01:00
Files
archived-doc-ru/reference/url/functions/parse-url.xml
2022-02-22 11:26:05 +03:00

304 lines
10 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: 195fde0082f2771a210a2818d3d4fa09c7ee785d Maintainer: aur Status: ready -->
<!-- Reviewed: no -->
<refentry xml:id="function.parse-url" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<refnamediv>
<refname>parse_url</refname>
<refpurpose>Разбирает URL и возвращает его компоненты</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<type class="union"><type>int</type><type>string</type><type>array</type><type>null</type><type>false</type></type><methodname>parse_url</methodname>
<methodparam><type>string</type><parameter>url</parameter></methodparam>
<methodparam choice="opt"><type>int</type><parameter>component</parameter><initializer>-1</initializer></methodparam>
</methodsynopsis>
<para>
Эта функция разбирает URL и возвращает ассоциативный массив, содержащий все
компоненты URL, которые в нём присутствуют.
Элементы массива <emphasis>не будут</emphasis> декодированы как URL.
</para>
<para>
Эта функция <emphasis role="strong">не</emphasis> предназначена для проверки на корректность данного URL,
она только разбивает его на нижеперечисленные части. Частичные и недопустимые URL также принимаются,
<function> parse_url</function> пытается сделать всё возможное, чтобы разобрать их корректно.
</para>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<para>
<variablelist>
<varlistentry>
<term><parameter>url</parameter></term>
<listitem>
<para>
URL для разбора.
</para>
</listitem>
</varlistentry>
</variablelist>
<variablelist>
<varlistentry>
<term><parameter>component</parameter></term>
<listitem>
<para>
Укажите одну из констант <constant>PHP_URL_SCHEME</constant>,
<constant>PHP_URL_HOST</constant>, <constant>PHP_URL_PORT</constant>,
<constant>PHP_URL_USER</constant>, <constant>PHP_URL_PASS</constant>,
<constant>PHP_URL_PATH</constant>, <constant>PHP_URL_QUERY</constant>
или <constant>PHP_URL_FRAGMENT</constant>, чтобы получить только конкретный компонент
URL в виде строки (<type>string</type>). Исключением является указание
<constant>PHP_URL_PORT</constant>, в этом случае возвращаемое значение
будет типа <type>int</type>.
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
При разборе значительно некорректных URL-адресов <function>parse_url</function> может вернуть &false;.
</para>
<para>
Если параметр <parameter>component</parameter> будет опущен, функция возвратит
ассоциативный массив (<type>array</type>). В массиве будет находиться по крайней мере один элемент.
Возможные ключи в этом массиве:
<itemizedlist>
<listitem>
<simpara>
<varname remap="structfield">scheme</varname> - например, http
</simpara>
</listitem>
<listitem>
<simpara>
<varname remap="structfield">host</varname>
</simpara>
</listitem>
<listitem>
<simpara>
<varname remap="structfield">port</varname>
</simpara>
</listitem>
<listitem>
<simpara>
<varname remap="structfield">user</varname>
</simpara>
</listitem>
<listitem>
<simpara>
<varname remap="structfield">pass</varname>
</simpara>
</listitem>
<listitem>
<simpara>
<varname remap="structfield">path</varname>
</simpara>
</listitem>
<listitem>
<simpara>
<varname remap="structfield">query</varname> - после знака вопроса <literal>?</literal>
</simpara>
</listitem>
<listitem>
<simpara>
<varname remap="structfield">fragment</varname> - после знака решётки <literal>#</literal>
</simpara>
</listitem>
</itemizedlist>
</para>
<para>
Если параметр <parameter>component</parameter> определён,
функция <function>parse_url</function> вернёт строку (<type>string</type>)
(или число (<type>int</type>), в случае <constant>PHP_URL_PORT</constant>)
вместо массива (<type>array</type>).
Если запрошенный компонент не существует в данном URL, будет возвращён &null;.
Начиная с PHP 8.0.0, <function>parse_url</function> различает отсутствующие и пустые запросы и фрагменты:
</para>
<para>
<informalexample>
<screen>
<![CDATA[
http://example.com/foo → query = null, fragment = null
http://example.com/foo? → query = "", fragment = null
http://example.com/foo# → query = null, fragment = ""
http://example.com/foo?# → query = "", fragment = ""
]]>
</screen>
</informalexample>
</para>
<para>
Ранее во всех случаях запрос и фрагмент были &null;.
</para>
<para>
Обратите внимание, что управляющие символы (смотрите <function>ctype_cntrl</function>)
в компонентах заменяются подчёркиванием (<literal>_</literal>).
</para>
</refsect1>
<refsect1 role="changelog">
&reftitle.changelog;
<informaltable>
<tgroup cols="2">
<thead>
<row>
<entry>&Version;</entry>
<entry>&Description;</entry>
</row>
</thead>
<tbody>
<row>
<entry>8.0.0</entry>
<entry>
<function>parse_url</function> теперь различает отсутствующие и пустые
запросы и фрагменты.
</entry>
</row>
</tbody>
</tgroup>
</informaltable>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<para>
<example>
<title>Пример использования <function>parse_url</function></title>
<programlisting role="php">
<![CDATA[
<?php
$url = 'http://username:password@hostname:9090/path?arg=value#anchor';
var_dump(parse_url($url));
var_dump(parse_url($url, PHP_URL_SCHEME));
var_dump(parse_url($url, PHP_URL_USER));
var_dump(parse_url($url, PHP_URL_PASS));
var_dump(parse_url($url, PHP_URL_HOST));
var_dump(parse_url($url, PHP_URL_PORT));
var_dump(parse_url($url, PHP_URL_PATH));
var_dump(parse_url($url, PHP_URL_QUERY));
var_dump(parse_url($url, PHP_URL_FRAGMENT));
?>
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
array(8) {
["scheme"]=>
string(4) "http"
["host"]=>
string(8) "hostname"
["port"]=>
int(9090)
["user"]=>
string(8) "username"
["pass"]=>
string(8) "password"
["path"]=>
string(5) "/path"
["query"]=>
string(9) "arg=value"
["fragment"]=>
string(6) "anchor"
}
string(4) "http"
string(8) "username"
string(8) "password"
string(8) "hostname"
int(9090)
string(5) "/path"
string(9) "arg=value"
string(6) "anchor"
]]>
</screen>
</example>
</para>
<para>
<example>
<title>Пример использования <function>parse_url</function> при отсутствии протокола</title>
<programlisting role="php">
<![CDATA[
<?php
$url = '//www.example.com/path?googleguy=googley';
// До 5.4.7 в path выводилось "//www.example.com/path"
var_dump(parse_url($url));
?>
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
array(3) {
["host"]=>
string(15) "www.example.com"
["path"]=>
string(5) "/path"
["query"]=>
string(17) "googleguy=googley"
}
]]>
</screen>
</example>
</para>
</refsect1>
<refsect1 role="notes">
&reftitle.notes;
<caution>
<para>
Функция может выдать некорректные результаты для относительных или недействительных URL-адресов и результаты могут даже не соответствовать общему поведению HTTP-клиентов.
Если необходимо проанализировать URL-адреса из ненадёжных входных данных, потребуется дополнительная проверка,
например, с помощью <function>filter_var</function> с фильтром <constant>FILTER_VALIDATE_URL</constant>.
</para>
</caution>
<note>
<para>
Эта функция предназначена специально для разбора URL-адресов, а не URI.
Однако, чтобы соответствовать требованиям обратной совместимости PHP, она делает
исключение для протокола file://, в которой допускаются тройные слеши (file:///...).
Для любого другого протокола это недопустимо.
</para>
</note>
</refsect1>
<refsect1 role="seealso">
&reftitle.seealso;
<para>
<simplelist>
<member><function>pathinfo</function></member>
<member><function>parse_str</function></member>
<member><function>http_build_query</function></member>
<member><function>dirname</function></member>
<member><function>basename</function></member>
<member><link xlink:href="&url.rfc;3986">RFC 3986</link></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
-->