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 */