<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/ref.url.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'fr',
  ),
  'this' => 
  array (
    0 => 'function.parse-url.php',
    1 => 'parse_url',
    2 => 'Analyse une URL et retourne ses composants',
  ),
  'up' => 
  array (
    0 => 'ref.url.php',
    1 => 'Fonctions URL',
  ),
  'prev' => 
  array (
    0 => 'function.http-build-query.php',
    1 => 'http_build_query',
  ),
  'next' => 
  array (
    0 => 'function.rawurldecode.php',
    1 => 'rawurldecode',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'fr',
    'path' => 'reference/url/functions/parse-url.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="function.parse-url" class="refentry">
 <div class="refnamediv">
  <h1 class="refname">parse_url</h1>
  <p class="verinfo">(PHP 4, PHP 5, PHP 7, PHP 8)</p><p class="refpurpose"><span class="refname">parse_url</span> &mdash; <span class="dc-title">Analyse une URL et retourne ses composants</span></p>

 </div>

 <div class="refsect1 description" id="refsect1-function.parse-url-description">
  <h3 class="title">Description</h3>
  <div class="methodsynopsis dc-description">
   <span class="methodname"><strong>parse_url</strong></span>(<span class="methodparam"><span class="type"><a href="language.types.string.php" class="type string">string</a></span> <code class="parameter">$url</code></span>, <span class="methodparam"><span class="type"><a href="language.types.integer.php" class="type int">int</a></span> <code class="parameter">$component</code><span class="initializer"> = -1</span></span>): <span class="type"><span class="type"><a href="language.types.integer.php" class="type int">int</a></span>|<span class="type"><a href="language.types.string.php" class="type string">string</a></span>|<span class="type"><a href="language.types.array.php" class="type array">array</a></span>|<span class="type"><a href="language.types.null.php" class="type null">null</a></span>|<span class="type"><a href="language.types.singleton.php" class="type false">false</a></span></span></div>

  <p class="para rdfs-comment">
   Cette fonction analyse une URL et retourne un tableau associatif contenant
   tous les éléments qui y sont présents.
   Les valeurs des éléments du tableau <em>NE sont PAS</em> URL décodés
  </p>
  <p class="para">
   Cette fonction n&#039;est <strong>pas</strong>
   faite pour valider l&#039;URL fournie, elle ne fait que la découper en parties listées
   ci-dessous. Les URL partielles et invalides sont également acceptées, la fonction
   <span class="function"><strong>parse_url()</strong></span> fera de son mieux pour les analyser correctement.
  </p>
  <div class="caution"><strong class="caution">Attention</strong>
   <p class="simpara">
    Cette fonction ne suit aucun standard URI ou URL établi.
    Elle retournera des résultats incorrects ou incohérents pour les URL
    relatives ou malformées. Même pour des URL valides, le résultat peut
    différer de celui d&#039;un autre analyseur d&#039;URL, car il existe plusieurs
    standards différents liés aux URL qui ciblent des cas d&#039;utilisation
    différents et qui diffèrent dans leurs exigences.
   </p>
   <p class="simpara">
    Le traitement d&#039;une URL avec des analyseurs suivant des standards d&#039;URL
    différents est une source courante de vulnérabilités de sécurité. Par
    exemple, la validation d&#039;une URL contre une liste de noms d&#039;hôtes
    autorisés avec l&#039;analyseur A pourrait être inefficace lorsque la
    récupération réelle de la ressource utilise l&#039;analyseur B qui extrait
    les noms d&#039;hôtes différemment.
   </p>
   <p class="simpara">
    Les classes <span class="classname"><a href="class.uri-rfc3986-uri.php" class="classname">Uri\Rfc3986\Uri</a></span> et <span class="classname"><a href="class.uri-whatwg-url.php" class="classname">Uri\WhatWg\Url</a></span>
    suivent strictement les standards RFC 3986 et WHATWG URL respectivement.
    Il est fortement recommandé d&#039;utiliser ces classes pour tout nouveau code
    et de migrer les utilisations existantes de la fonction <span class="function"><strong>parse_url()</strong></span>
    vers ces classes, à moins que le comportement de <span class="function"><strong>parse_url()</strong></span>
    ne doive être préservé pour des raisons de compatibilité.
   </p>
  </div>
 </div>


 <div class="refsect1 parameters" id="refsect1-function.parse-url-parameters">
  <h3 class="title">Liste de paramètres</h3>
  <p class="para">
   <dl>
    
     <dt><code class="parameter">url</code></dt>
     <dd>
      <p class="para">
       L&#039;URL à analyser.
      </p>
     </dd>
    
   </dl>
   <dl>
    
     <dt><code class="parameter">component</code></dt>
     <dd>
      <p class="para">
       Peut être une des constantes parmi <strong><code><a href="url.constants.php#constant.php-url-scheme">PHP_URL_SCHEME</a></code></strong>,
       <strong><code><a href="url.constants.php#constant.php-url-host">PHP_URL_HOST</a></code></strong>, <strong><code><a href="url.constants.php#constant.php-url-port">PHP_URL_PORT</a></code></strong>,
       <strong><code><a href="url.constants.php#constant.php-url-user">PHP_URL_USER</a></code></strong>, <strong><code><a href="url.constants.php#constant.php-url-pass">PHP_URL_PASS</a></code></strong>,
       <strong><code><a href="url.constants.php#constant.php-url-path">PHP_URL_PATH</a></code></strong>, <strong><code><a href="url.constants.php#constant.php-url-query">PHP_URL_QUERY</a></code></strong>
       ou <strong><code><a href="url.constants.php#constant.php-url-fragment">PHP_URL_FRAGMENT</a></code></strong> pour récupérer uniquement
       une partie de l&#039;URL en tant que chaîne de caractères (sauf lorsque
       <strong><code><a href="url.constants.php#constant.php-url-port">PHP_URL_PORT</a></code></strong> est fourni ; dans ce cas, la valeur retournée
       sera un <a href="language.types.integer.php" class="link">entier</a>).
      </p>
     </dd>
    
   </dl>
  </p>
 </div>


 <div class="refsect1 returnvalues" id="refsect1-function.parse-url-returnvalues">
  <h3 class="title">Valeurs de retour</h3>
  <p class="para">
   Pour les URL vraiment mal formées, <span class="function"><strong>parse_url()</strong></span> peut retourner
   <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong>.
  </p>
  <p class="para">
   Si le paramètre <code class="parameter">component</code> est omis, un <span class="type"><a href="language.types.array.php" class="type array">array</a></span>
   associatif est retourné. Au moins un élément sera présent dans le tableau. Voici
   les clés potentielles de ce tableau:
   <ul class="itemizedlist">
    <li class="listitem">
     <span class="simpara">
      <var class="varname">scheme</var> - par exemple <code class="literal">http</code>
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      <var class="varname">host</var>
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      <var class="varname">port</var>
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      <var class="varname">user</var>
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      <var class="varname">pass</var>
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      <var class="varname">path</var>
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      <var class="varname">query</var> - après le point d&#039;interrogation &quot;<code class="literal">?</code>&quot;
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      <var class="varname">fragment</var> - après le croisillon (dièse) &quot;<code class="literal">#</code>&quot;
     </span>
    </li>
   </ul>
  </p>
  <p class="para">
   Si le paramètre <code class="parameter">component</code> est spécifié, <span class="function"><strong>parse_url()</strong></span>
   retourne une <span class="type"><a href="language.types.string.php" class="type string">string</a></span> (ou un <a href="language.types.integer.php" class="link">entier</a> dans le cas d&#039;utilisation de la
   constante <strong><code><a href="url.constants.php#constant.php-url-port">PHP_URL_PORT</a></code></strong>) au lieu d&#039;un <span class="type"><a href="language.types.array.php" class="type array">array</a></span>. Si le composant
   demandé n&#039;existe pas dans l&#039;URL, <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> sera retourné.
   À partir de PHP 8.0.0, <span class="function"><strong>parse_url()</strong></span> distingue entre les
   fragments et requêtes absentes et vides :
  </p>
  <p class="para">
   <div class="informalexample">
    <div class="example-contents screen">
<div class="returnvaluescode"><pre class="returnvaluescode">http://example.com/foo → query = null, fragment = null
http://example.com/foo? → query = &quot;&quot;,   fragment = null
http://example.com/foo# → query = null, fragment = &quot;&quot;
http://example.com/foo?# → query = &quot;&quot;,   fragment = &quot;&quot;</pre>
</div>
    </div>
   </div>
  </p>
  <p class="para">
   Précédemment tous les cas résultaient en la requête et le fragment étant <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong>.
  </p>
  <p class="para">
   À noter que les caractères de contrôle (cf. <span class="function"><a href="function.ctype-cntrl.php" class="function">ctype_cntrl()</a></span>)
   dans les composants sont remplacés par un tiret du bas
   (<code class="literal">_</code>).
  </p>
 </div>


 <div class="refsect1 changelog" id="refsect1-function.parse-url-changelog">
  <h3 class="title">Historique</h3>
  <table class="doctable informaltable">
   
    <thead>
     <tr>
      <th>Version</th>
      <th>Description</th>
     </tr>

    </thead>

    <tbody class="tbody">
     <tr>
      <td>8.0.0</td>
      <td>
       <span class="function"><strong>parse_url()</strong></span> distingue désormais entre les fragments
       et requêtes absentes et vides.
      </td>
     </tr>

    </tbody>
   
  </table>

 </div>


 <div class="refsect1 examples" id="refsect1-function.parse-url-examples">
  <h3 class="title">Exemples</h3>
  <p class="para">
   <div class="example" id="example-1">
    <p><strong>Exemple #1 Exemple avec <span class="function"><strong>parse_url()</strong></span></strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$url </span><span style="color: #007700">= </span><span style="color: #DD0000">'http://username:password@hostname:9090/path?arg=value#anchor'</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">parse_url</span><span style="color: #007700">(</span><span style="color: #0000BB">$url</span><span style="color: #007700">));<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">parse_url</span><span style="color: #007700">(</span><span style="color: #0000BB">$url</span><span style="color: #007700">, </span><span style="color: #0000BB">PHP_URL_SCHEME</span><span style="color: #007700">));<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">parse_url</span><span style="color: #007700">(</span><span style="color: #0000BB">$url</span><span style="color: #007700">, </span><span style="color: #0000BB">PHP_URL_USER</span><span style="color: #007700">));<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">parse_url</span><span style="color: #007700">(</span><span style="color: #0000BB">$url</span><span style="color: #007700">, </span><span style="color: #0000BB">PHP_URL_PASS</span><span style="color: #007700">));<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">parse_url</span><span style="color: #007700">(</span><span style="color: #0000BB">$url</span><span style="color: #007700">, </span><span style="color: #0000BB">PHP_URL_HOST</span><span style="color: #007700">));<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">parse_url</span><span style="color: #007700">(</span><span style="color: #0000BB">$url</span><span style="color: #007700">, </span><span style="color: #0000BB">PHP_URL_PORT</span><span style="color: #007700">));<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">parse_url</span><span style="color: #007700">(</span><span style="color: #0000BB">$url</span><span style="color: #007700">, </span><span style="color: #0000BB">PHP_URL_PATH</span><span style="color: #007700">));<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">parse_url</span><span style="color: #007700">(</span><span style="color: #0000BB">$url</span><span style="color: #007700">, </span><span style="color: #0000BB">PHP_URL_QUERY</span><span style="color: #007700">));<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">parse_url</span><span style="color: #007700">(</span><span style="color: #0000BB">$url</span><span style="color: #007700">, </span><span style="color: #0000BB">PHP_URL_FRAGMENT</span><span style="color: #007700">));<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

    <div class="example-contents"><p>L&#039;exemple ci-dessus va afficher :</p></div>
    <div class="example-contents screen">
<div class="examplescode"><pre class="examplescode">array(8) {
  [&quot;scheme&quot;]=&gt;
  string(4) &quot;http&quot;
  [&quot;host&quot;]=&gt;
  string(8) &quot;hostname&quot;
  [&quot;port&quot;]=&gt;
  int(9090)
  [&quot;user&quot;]=&gt;
  string(8) &quot;username&quot;
  [&quot;pass&quot;]=&gt;
  string(8) &quot;password&quot;
  [&quot;path&quot;]=&gt;
  string(5) &quot;/path&quot;
  [&quot;query&quot;]=&gt;
  string(9) &quot;arg=value&quot;
  [&quot;fragment&quot;]=&gt;
  string(6) &quot;anchor&quot;
}
string(4) &quot;http&quot;
string(8) &quot;username&quot;
string(8) &quot;password&quot;
string(8) &quot;hostname&quot;
int(9090)
string(5) &quot;/path&quot;
string(9) &quot;arg=value&quot;
string(6) &quot;anchor&quot;</pre>
</div>
    </div>
   </div>
  </p>
  <p class="para">
   <div class="example" id="example-2">
    <p><strong>Exemple #2 Exemple avec la fonction <span class="function"><strong>parse_url()</strong></span> sans schéma</strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$url </span><span style="color: #007700">= </span><span style="color: #DD0000">'//www.example.com/path?googleguy=googley'</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// Avant PHP 5.4.7, le chemin sera "//www.example.com/path"<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">parse_url</span><span style="color: #007700">(</span><span style="color: #0000BB">$url</span><span style="color: #007700">));<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

    <div class="example-contents"><p>L&#039;exemple ci-dessus va afficher :</p></div>
    <div class="example-contents screen">
<div class="examplescode"><pre class="examplescode">array(3) {
  [&quot;host&quot;]=&gt;
  string(15) &quot;www.example.com&quot;
  [&quot;path&quot;]=&gt;
  string(5) &quot;/path&quot;
  [&quot;query&quot;]=&gt;
  string(17) &quot;googleguy=googley&quot;
}</pre>
</div>
    </div>
   </div>
  </p>
 </div>


 <div class="refsect1 notes" id="refsect1-function.parse-url-notes">
  <h3 class="title">Notes</h3>
  <blockquote class="note"><p><strong class="note">Note</strong>: 
   <p class="para">
    <span class="function"><strong>parse_url()</strong></span> a été créée tout spécialement pour analyser les URL
    et non les URI. Cependant, pour des raisons de rétrocompatibilité, PHP
    fait une exception pour le schéma <code class="literal">file://</code> où les triples slashs
    (<code class="literal">file:///</code>...) sont autorisés. Tous les autres schémas sont invalides.
   </p>
  </p></blockquote>
 </div>


 <div class="refsect1 seealso" id="refsect1-function.parse-url-seealso">
  <h3 class="title">Voir aussi</h3>
  <p class="para">
   <ul class="simplelist">
    <li><span class="function"><a href="function.pathinfo.php" class="function" rel="rdfs-seeAlso">pathinfo()</a> - Retourne des informations sur un chemin syst&egrave;me</span></li>
    <li><span class="function"><a href="function.parse-str.php" class="function" rel="rdfs-seeAlso">parse_str()</a> - Analyse une cha&icirc;ne de caract&egrave;res comme une cha&icirc;ne de requ&ecirc;te URL</span></li>
    <li><span class="function"><a href="function.http-build-query.php" class="function" rel="rdfs-seeAlso">http_build_query()</a> - G&eacute;n&egrave;re une cha&icirc;ne de requ&ecirc;te en encodage URL</span></li>
    <li><span class="function"><a href="function.dirname.php" class="function" rel="rdfs-seeAlso">dirname()</a> - Renvoie le chemin du dossier parent</span></li>
    <li><span class="function"><a href="function.basename.php" class="function" rel="rdfs-seeAlso">basename()</a> - Retourne le nom de la composante finale d'un chemin</span></li>
    <li><a href="https://datatracker.ietf.org/doc/html/rfc3986" class="link external">&raquo;&nbsp;RFC 3986</a></li>
   </ul>
  </p>
 </div>

</div><?php manual_footer($setup); ?>