php - valores - Obtenga la URL completa, incluida la cadena de consulta y el anclaje
pasar variable en url (7)
Es cierto que no puede pasar datos hash al servidor. pero a veces lo que quieres es obtener una URL con ''#blablabla'' del servidor, como cuando compartes el enlace a alguien con ''#'', pero el sitio necesita iniciar sesión. a continuación hay otra manera de pensar, tal vez no variar detalladamente.
Primero, a veces quieres compartir tu enlace con ''#'', como:
www.so.com#lala
En primer lugar, puede cambiar el uso de su URL javascript y pasar algunos datos con ''?'' y ''#'' al mismo tiempo, como:
www.so.com?foo=lala&&flag=hash#lala
luego, como el ''#'' nerver pasa al servidor, pero puede obtener los datos de $ _GET [''''], como:
if($_GET[''flag''] === ''hash''){
// base url
$_SESSION[''url''] = strtok(''http://''.$_SERVER[''HTTP_HOST''].$_SERVER["REQUEST_URI"],"?");
// hash data
$_SESSION[''hash''] = $_GET[''foo''];
}
entonces, puedes hacer todo con los datos ''#'', si quieres pasarlo al cliente, puedes:
$url = $_SESSION[''url'']."#".$_SESSION[''hash''];
header("Location:".$url);
Por fin, la url ha vuelto
¿Hay alguna manera de obtener toda la URL utilizada para solicitar la página actual, incluido el ancla (el texto después del # - Puedo estar usando la palabra incorrecta) en las páginas incluidas?
es decir, la página foo.php está incluida en bar.php. Si uso tu solución en foo.php, necesito que diga bar.php? Blarg = a # blahblahblah
Este ejemplo muestra la solicitud de URL completa con port
o https
function curPageURL() {
$pageURL = ''http'';
if(isset($_SERVER["HTTPS"]))
if ($_SERVER["HTTPS"] == "on") {
$pageURL .= "s";
}
$pageURL .= "://";
if ($_SERVER["SERVER_PORT"] != "80") {
$pageURL .= $_SERVER["SERVER_NAME"] . ":" . $_SERVER["SERVER_PORT"] . $_SERVER["REQUEST_URI"];
} else {
$pageURL .= $_SERVER["SERVER_NAME"] . $_SERVER["REQUEST_URI"];
}
return $pageURL;
}
uso: echo curPageURL();
No puede: tendrá que escribir el valor del hash en una cookie a través de Javascript para enviarlo al servidor en la solicitud posterior.
Puede pasar el ancla usando la función rawurlencode.
Básicamente, solo necesitas hacer algo como esto:
bar.php?blarg=a<?php echo rawurlencode(''#blahblahblah'')?>
Puede pasar la URL completa, incluido el anclaje (la parte posterior al #), utilizando una función de carga de Javascript que envía esa URL a un punto final Ajax.
No, me temo que no, ya que el hash (la cadena que incluye el #) nunca pasa al servidor, es solo una propiedad de comportamiento del navegador. Sin $_SERVER[''REQUEST_URI'']
variable $_SERVER[''REQUEST_URI'']
contendrá el resto.
Si realmente necesita saber qué es el hash, deberá usar la propiedad de document.location.hash
, que contiene los contenidos del hash (puede insertarlo en un formulario o enviarlo al servidor con un solicitud ajax).
// find out the domain:
$domain = $_SERVER[''HTTP_HOST''];
// find out the path to the current file:
$path = $_SERVER[''SCRIPT_NAME''];
// find out the QueryString:
$queryString = $_SERVER[''QUERY_STRING''];
// put it all together:
$url = "http://" . $domain . $path . "?" . $queryString;
echo $url;
// An alternative way is to use REQUEST_URI instead of both
// SCRIPT_NAME and QUERY_STRING, if you don''t need them seperate:
$url = "http://" . $domain . $_SERVER[''REQUEST_URI''];
echo $url;