Mantén la atención porque en esta división vas a hallar la contestación que buscas.Este artículo fue probado por nuestros especialistas para asegurar la calidad y exactitud de nuestro post.
Solución:
Estas son las dos funciones que utilizo para descomponer y reconstruir URL:
function http_parse_query($query)
$parameters = array();
$queryParts = explode('&', $query);
foreach ($queryParts as $queryPart)
$keyValue = explode('=', $queryPart, 2);
$parameters[$keyValue[0]] = $keyValue[1];
return $parameters;
function build_url(array $parts)
return (isset($parts['scheme']) ? "$parts['scheme']:" : '') .
((isset($parts['user'])
// Example
$parts = parse_url($url);
if (isset($parts['query']))
$parameters = http_parse_query($parts['query']);
foreach ($parameters as $key => $value)
$parameters[$key] = $value; // do stuff with $value
$parts['query'] = http_build_query($parameters);
$url = build_url($parts);
deberías poder hacer
http_build_url($parse)
NOTA: http_build_url solo está disponible al instalar pecl_http.
De acuerdo con los documentos, está diseñado específicamente para manejar la salida de parse_url
. Ambas funciones manejan anclas, parámetros de consulta, etc., por lo que no hay “otras propiedades no mencionadas en $url”.
Para agregar http://
cuando falta, use una verificación básica antes de analizarlo:
if (strpos($url, "http://") != 0)
$url = "http://$url";
Esta función debería hacer el truco:
function unparse_url(array $parsed): string
$pass = $parsed['pass'] ?? null;
$user = $parsed['user'] ?? null;
$userinfo = $pass !== null ? "$user:$pass" : $user;
$port = $parsed['port'] ?? 0;
$scheme = $parsed['scheme'] ?? "";
$query = $parsed['query'] ?? "";
$fragment = $parsed['fragment'] ?? "";
$authority = (
($userinfo !== null ? "[email protected]" : "") .
($parsed['host'] ?? "") .
($port ? ":$port" : "")
);
return (
(strlen($scheme) > 0 ? "$scheme:" : "") .
(strlen($authority) > 0 ? "//$authority" : "") .
($parsed['path'] ?? "") .
(strlen($query) > 0 ? "?$query" : "") .
(strlen($fragment) > 0 ? "#$fragment" : "")
);
Aquí hay una breve prueba para ello:
function unparse_url_test()
foreach ([
'',
'foo',
'http://www.google.com/',
'http://u:[email protected]:1/path/path?q#frag',
'http://u:[email protected]:1/path/path?#',
'ssh://[email protected]',
'://:@:1/?#',
'http://:@foo:1/path/path?#',
'http://@foo:1/path/path?#',
] as $url)
$parsed1 = parse_url($url);
$parsed2 = parse_url(unparse_url($parsed1));
if ($parsed1 !== $parsed2)
print var_export($parsed1, true) . "n!==n" . var_export($parsed2, true) . "nn";
unparse_url_test();
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)