the serialize query parse convertir php parse-url

query - serialize url php



php parse_url reverse-url analizado (5)

Deberias poder hacer

http_build_url($parse)

NOTA: http_build_url solo está disponible instalando pecl_http.

Según los documentos, está diseñado específicamente para manejar la salida de parse_url . Ambas funciones manejan los anclajes, los parámetros de consulta, etc., por lo que no hay "otras propiedades no mencionadas en el $ url".

Para agregar http:// cuando falta, use una verificación básica antes de analizarla:

if (strpos($url, "http://") != 0) $url = "http://$url";

¿Hay una manera de revertir la url de una url analizada?

$url = ''http://www.domain.com/dir/index.php?query=blabla#more_bla''; $parse = parse_url($url); print_r($parse); /* array( ''scheme''=>''http://'', etc.... ) */ $revere = reverse_url($parse); // probably does not exist but u get the point echo $reverse; //outputs:// "http://www.domain.com/dir/index.php?query=blabla#more_bla"

O si hay una manera de validar una URL que falta parte de sus URL recomendadas, por ejemplo

www.mydomain.com

mydomain.com

Todos deben regresar a http://www.mydomain.com o con el subdominio correcto


Esta función debería hacer el truco:

/** * @param array $parsed * @return string */ function unparse_url(array $parsed) { $get = function ($key) use ($parsed) { return isset($parsed[$key]) ? $parsed[$key] : null; }; $pass = $get(''pass''); $user = $get(''user''); $userinfo = $pass !== null ? "$user:$pass" : $user; $port = $get(''port''); $scheme = $get(''scheme''); $query = $get(''query''); $fragment = $get(''fragment''); $authority = ($userinfo !== null ? "$userinfo@" : '''') . $get(''host'') . ($port ? ":$port" : ''''); return (strlen($scheme) ? "$scheme:" : '''') . (strlen($authority) ? "//$authority" : '''') . $get(''path'') . (strlen($query) ? "?$query" : '''') . (strlen($fragment) ? "#$fragment" : ''''); }

Aquí hay una breve prueba para ello:

function unparse_url_test() { foreach ([ '''', ''foo'', ''http://www.google.com/'', ''http://u:p@foo:1/path/path?q#frag'', ''http://u:p@foo:1/path/path?#'', ''ssh://root@host'', ''://:@: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) . "/n/n"; } } } unparse_url_test();


Estas son las dos funciones que utilizo para descomponer y reconstruir las 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'']) || isset($parts[''host''])) ? ''//'' : '''') . (isset($parts[''user'']) ? "{$parts[''user'']}" : '''') . (isset($parts[''pass'']) ? ":{$parts[''pass'']}" : '''') . (isset($parts[''user'']) ? ''@'' : '''') . (isset($parts[''host'']) ? "{$parts[''host'']}" : '''') . (isset($parts[''port'']) ? ":{$parts[''port'']}" : '''') . (isset($parts[''path'']) ? "{$parts[''path'']}" : '''') . (isset($parts[''query'']) ? "?{$parts[''query'']}" : '''') . (isset($parts[''fragment'']) ? "#{$parts[''fragment'']}" : ''''); } // 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);


Obtenga la última cadena de url, por ejemplo: http://example.com/controllername/functionname y necesita obtener functionname

$ referer = explode (''/'', strrev ($ _ SERVER [''HTTP_REFERER'']));

$ lastString = strrev ($ referer [0]);


Otra implementación:

function build_url(array $elements) { $e = $elements; return (isset($e[''host'']) ? ( (isset($e[''scheme'']) ? "$e[scheme]://" : ''//'') . (isset($e[''user'']) ? $e[''user''] . (isset($e[''pass'']) ? ":$e[pass]" : '''') . ''@'' : '''') . $e[''host''] . (isset($e[''port'']) ? ":$e[port]" : '''') ) : '''') . (isset($e[''path'']) ? $e[''path''] : ''/'') . (isset($e[''query'']) ? ''?'' . (is_array($e[''query'']) ? http_build_query($e[''query''], '''', ''&'') : $e[''query'']) : '''') . (isset($e[''fragment'']) ? "#$e[fragment]" : '''') ; }

Los resultados deben ser:

{ "host": "example.com" } /* //example.com/ */ { "scheme": "https", "host": "example.com" } /* https://example.com/ */ { "scheme": "http", "host": "example.com", "port": 8080, "path": "/x/y/z" } /* http://example.com:8080/x/y/z */ { "scheme": "http", "host": "example.com", "port": 8080, "user": "anonymous", "query": "a=b&c=d", "fragment": "xyz" } /* http://[email protected]:8080/?a=b&c=d#xyz */ { "scheme": "http", "host": "example.com", "user": "root", "pass": "stupid", "path": "/x/y/z", "query": { "a": "b", "c": "d" } } /* http://root:[email protected]/x/y/z?a=b&c=d */ { "path": "/x/y/z", "query": "a=b&c=d" } /* /x/y/z?a=b&c=d */