Buscar..


Analizar una URL

Para separar una URL en sus componentes individuales, use parse_url() :

$url = 'http://www.example.com/page?foo=1&bar=baz#anchor';
$parts = parse_url($url);

Después de ejecutar lo anterior, el contenido de $parts sería:

Array
(
    [scheme] => http
    [host] => www.example.com
    [path] => /page
    [query] => foo=1&bar=baz
    [fragment] => anchor
)

También puede devolver selectivamente solo un componente de la url. Para devolver sólo la cadena de consulta:

$url = 'http://www.example.com/page?foo=1&bar=baz#anchor';
$queryString = parse_url($url, PHP_URL_QUERY);

Se acepta cualquiera de las siguientes constantes: PHP_URL_SCHEME , PHP_URL_HOST , PHP_URL_PORT , PHP_URL_USER , PHP_URL_PASS , PHP_URL_PATH , PHP_URL_QUERY y PHP_URL_FRAGMENT .

Para analizar aún más una cadena de consulta en pares de valores clave, use parse_str() :

$params = [];
parse_str($queryString, $params);

Después de la ejecución de lo anterior, la matriz $params se completaría con lo siguiente:

Array
(
    [foo] => 1
    [bar] => baz
)

Redireccionando a otra URL

Puede usar la función header() para indicar al navegador que redireccione a una URL diferente:

$url = 'https://example.org/foo/bar';
if (!headers_sent()) { // check headers - you can not send headers if they already sent
  header('Location: ' . $url);
  exit; // protects from code being executed after redirect request
} else {
  throw new Exception('Cannot redirect, headers already sent');
}

También puede redirigir a una URL relativa (esto no es parte de la especificación HTTP oficial, pero funciona en todos los navegadores):

$url = 'foo/bar';
if (!headers_sent()) {
  header('Location: ' . $url);
  exit;
} else {
  throw new Exception('Cannot redirect, headers already sent');
}

Si se han enviado encabezados, alternativamente puede enviar una etiqueta HTML de meta refresh .

ADVERTENCIA: la etiqueta meta refresh se basa en que HTML sea procesado correctamente por el cliente, y algunos no lo harán. En general, solo funciona en navegadores web. Además, tenga en cuenta que si se han enviado encabezados, es posible que tenga un error y esto debería provocar una excepción.

También puede imprimir un enlace para que los usuarios hagan clic, para los clientes que ignoran la etiqueta de meta actualización:

$url = 'https://example.org/foo/bar';
if (!headers_sent()) {
  header('Location: ' . $url);
} else {
  $saveUrl = htmlspecialchars($url); // protects from browser seeing url as HTML
  // tells browser to redirect page to $saveUrl after 0 seconds
  print '<meta http-equiv="refresh" content="0; url=' . $saveUrl . '">';
  // shows link for user
  print '<p>Please continue to <a href="' . $saveUrl . '">' . $saveUrl . '</a></p>';
}
exit;

Construye una cadena de consulta codificada en URL desde una matriz

El http_build_query() creará una cadena de consulta desde una matriz u objeto. Estas cadenas se pueden adjuntar a una URL para crear una solicitud GET o se pueden usar en una solicitud POST con, por ejemplo, cURL.

$parameters = array(
    'parameter1' => 'foo',
    'parameter2' => 'bar',
);
$queryString = http_build_query($parameters);

$queryString tendrá el siguiente valor:

parameter1=foo&parameter2=bar

http_build_query() también funcionará con matrices multidimensionales:

$parameters = array(
    "parameter3" => array(
        "sub1" => "foo",
        "sub2" => "bar",
    ),
    "parameter4" => "baz",
);
$queryString = http_build_query($parameters);

$queryString tendrá este valor:

parameter3%5Bsub1%5D=foo&parameter3%5Bsub2%5D=bar&parameter4=baz

que es la versión codificada en URL de

parameter3[sub1]=foo&parameter3[sub2]=bar&parameter4=baz


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow