<?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 => 'es',
  ),
  'this' => 
  array (
    0 => 'function.parse-url.php',
    1 => 'parse_url',
    2 => 'Analiza una URL y devuelve sus componentes',
  ),
  'up' => 
  array (
    0 => 'ref.url.php',
    1 => 'Funciones de 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' => 'es',
    '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">Analiza una URL y devuelve sus componentes</span></p>

 </div>

 <div class="refsect1 description" id="refsect1-function.parse-url-description">
  <h3 class="title">Descripción</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">
   Esta función analiza una URL y devuelve un array asociativo que contiene
   todos los elementos presentes en la misma.
   Los valores de los elementos del array <em>NO ESTÁN</em> decodificados de la URL.
  </p>
  <p class="para">
   Esta función <strong>no está</strong>
   diseñada para validar la URL proporcionada, solo la divide en las partes enumeradas
   a continuación. Las URL parciales e inválidas también son aceptadas, la función
   <span class="function"><strong>parse_url()</strong></span> hará todo lo posible para analizarlas correctamente.
  </p>
  <div class="caution"><strong class="caution">Precaución</strong>
   <p class="simpara">
    Esta función no sigue ningún estándar URI o URL establecido.
    Devolverá resultados incorrectos o sin sentido para URL relativas o
    malformadas. Incluso para URL válidas, el resultado puede diferir del de
    otro analizador de URL, ya que existen múltiples estándares diferentes
    relacionados con las URL que se dirigen a diferentes casos de uso y que
    difieren en sus requisitos.
   </p>
   <p class="simpara">
    El procesamiento de una URL con analizadores que siguen diferentes estándares
    de URL es una fuente común de vulnerabilidades de seguridad. Por ejemplo,
    la validación de una URL contra una lista de nombres de host permitidos con
    el analizador A podría ser ineficaz cuando la recuperación real del recurso
    utiliza el analizador B que extrae los nombres de host de manera diferente.
   </p>
   <p class="simpara">
    Las clases <span class="classname"><a href="class.uri-rfc3986-uri.php" class="classname">Uri\Rfc3986\Uri</a></span> y <span class="classname"><a href="class.uri-whatwg-url.php" class="classname">Uri\WhatWg\Url</a></span>
    siguen estrictamente los estándares RFC 3986 y WHATWG URL respectivamente.
    Se recomienda encarecidamente utilizar estas clases para todo el código nuevo
    y migrar los usos existentes de la función <span class="function"><strong>parse_url()</strong></span>
    a estas clases, a menos que el comportamiento de <span class="function"><strong>parse_url()</strong></span>
    deba preservarse por razones de compatibilidad.
   </p>
  </div>
 </div>


 <div class="refsect1 parameters" id="refsect1-function.parse-url-parameters">
  <h3 class="title">Parámetros</h3>
  <p class="para">
   <dl>
    
     <dt><code class="parameter">url</code></dt>
     <dd>
      <p class="para">
       La URL a analizar.
      </p>
     </dd>
    
   </dl>
   <dl>
    
     <dt><code class="parameter">component</code></dt>
     <dd>
      <p class="para">
       Puede ser una de las constantes entre <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>
       o <strong><code><a href="url.constants.php#constant.php-url-fragment">PHP_URL_FRAGMENT</a></code></strong> para recuperar únicamente
       una parte de la URL como <span class="type"><a href="language.types.string.php" class="type string">string</a></span> (excepto cuando
       se proporciona <strong><code><a href="url.constants.php#constant.php-url-port">PHP_URL_PORT</a></code></strong>; en este caso, el valor devuelto
       será un <span class="type"><a href="language.types.integer.php" class="type int">int</a></span>).
      </p>
     </dd>
    
   </dl>
  </p>
 </div>


 <div class="refsect1 returnvalues" id="refsect1-function.parse-url-returnvalues">
  <h3 class="title">Valores devueltos</h3>
  <p class="para">
   Para URL realmente mal formadas, <span class="function"><strong>parse_url()</strong></span> puede devolver
   <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong>.
  </p>
  <p class="para">
   Si el parámetro <code class="parameter">component</code> se omite, se devuelve un <span class="type"><a href="language.types.array.php" class="type array">array</a></span>
   asociativo. Al menos un elemento estará presente en el array. Estas
   son las claves potenciales de este array:
   <ul class="itemizedlist">
    <li class="listitem">
     <span class="simpara">
      <var class="varname">scheme</var> - por ejemplo <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> - después del signo de interrogación &quot;<code class="literal">?</code>&quot;
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      <var class="varname">fragment</var> - después del símbolo de almohadilla &quot;<code class="literal">#</code>&quot;
     </span>
    </li>
   </ul>
  </p>
  <p class="para">
   Si el parámetro <code class="parameter">component</code> está especificado, <span class="function"><strong>parse_url()</strong></span>
   devuelve un <span class="type"><a href="language.types.string.php" class="type string">string</a></span> (o un <span class="type"><a href="language.types.integer.php" class="type int">int</a></span>, en el caso de
   <strong><code><a href="url.constants.php#constant.php-url-port">PHP_URL_PORT</a></code></strong>) en lugar de un <span class="type"><a href="language.types.array.php" class="type array">array</a></span>. Si el componente
   solicitado no existe en la URL, <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> será devuelto.
   A partir de PHP 8.0.0, <span class="function"><strong>parse_url()</strong></span> distingue entre los
   fragmentos y consultas ausentes y vacíos:
  </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">
   Anteriormente todos los casos resultaban en la consulta y el fragmento siendo <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong>.
  </p>
  <p class="para">
   Cabe señalar que los caracteres de control (ver <span class="function"><a href="function.ctype-cntrl.php" class="function">ctype_cntrl()</a></span>)
   en los componentes son reemplazados por un guion bajo
   (<code class="literal">_</code>).
  </p>
 </div>


 <div class="refsect1 changelog" id="refsect1-function.parse-url-changelog">
  <h3 class="title">Historial de cambios</h3>
  <table class="doctable informaltable">
   
    <thead>
     <tr>
      <th>Versión</th>
      <th>Descripción</th>
     </tr>

    </thead>

    <tbody class="tbody">
     <tr>
      <td>8.0.0</td>
      <td>
       <span class="function"><strong>parse_url()</strong></span> distingue ahora entre los fragmentos
       y consultas ausentes y vacíos.
      </td>
     </tr>

    </tbody>
   
  </table>

 </div>


 <div class="refsect1 examples" id="refsect1-function.parse-url-examples">
  <h3 class="title">Ejemplos</h3>
  <p class="para">
   <div class="example" id="example-1">
    <p><strong>Ejemplo #1 Ejemplo con <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>El ejemplo anterior mostrará:</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>Ejemplo #2 Ejemplo con la función <span class="function"><strong>parse_url()</strong></span> sin esquema</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">// Antes de PHP 5.4.7, la ruta sería "//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>El ejemplo anterior mostrará:</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">Notas</h3>
  <blockquote class="note"><p><strong class="note">Nota</strong>: 
   <p class="para">
    <span class="function"><strong>parse_url()</strong></span> fue creada específicamente para analizar URL
    y no URI. Sin embargo, por razones de compatibilidad adyacente, PHP
    hace una excepción para el esquema <code class="literal">file://</code> donde los triples slashs
    (<code class="literal">file:///</code>...) están permitidos. Todos los demás esquemas son inválidos.
   </p>
  </p></blockquote>
 </div>


 <div class="refsect1 seealso" id="refsect1-function.parse-url-seealso">
  <h3 class="title">Ver también</h3>
  <p class="para">
   <ul class="simplelist">
    <li><span class="function"><a href="function.pathinfo.php" class="function" rel="rdfs-seeAlso">pathinfo()</a> - Devuelve informaci&oacute;n sobre una ruta del sistema</span></li>
    <li><span class="function"><a href="function.parse-str.php" class="function" rel="rdfs-seeAlso">parse_str()</a> - Analiza una string como una cadena de consulta URL</span></li>
    <li><span class="function"><a href="function.http-build-query.php" class="function" rel="rdfs-seeAlso">http_build_query()</a> - Genera una string de consulta con codificaci&oacute;n URL</span></li>
    <li><span class="function"><a href="function.dirname.php" class="function" rel="rdfs-seeAlso">dirname()</a> - Devuelve la ruta de la carpeta padre</span></li>
    <li><span class="function"><a href="function.basename.php" class="function" rel="rdfs-seeAlso">basename()</a> - Devuelve el nombre del componente final de una ruta</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); ?>