2009-06-09 12 views
35

¿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 ?Obtener la URL completa, incluida la cadena de consulta y el ancla

es decir, la página foo.php está incluida en bar.php. Si utilizo su solución en foo.php, necesito que diga bar.php? Blarg = a # blahblahblah

+0

ver http://stackoverflow.com/questions/940905/can-php-read-the-hash-portion-of-the-url/940918 –

Respuesta

70

No, me temo que no, ya que el hash (la cadena incluyendo el #) nunca pasa al servidor, es únicamente una propiedad de comportamiento del navegador. La variable $_SERVER['REQUEST_URI'] contendrá el resto sin embargo.

Si realmente necesita saber qué es el hash, tendrá que utilizar la propiedad document.location.hash JavaScript, que contiene el contenido del hash (puede insertarlo en un formulario o enviarlo al servidor con un solicitud ajax).

3

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.

+0

¿Puede profundizar en eso o proporcionar alguna información de referencia sobre cómo hacerlo? –

5

Puede pasar la URL completa, incluido el ancla (la parte después del #), utilizando una función de carga de Javascript que envía esa URL a un punto final Ajax.

-5

Puede pasar el ancla usando la función rawurlencode.

Básicamente sólo tiene que hacer algo como esto:

bar.php?blarg=a<?php echo rawurlencode('#blahblahblah')?> 
+0

Creo que malinterpretaste la pregunta.Quería leer el ancla nombrada de la url, no codificar una para la salida. –

2

solicitud de URL completa Este ejemplo de demostración 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();

+0

Esto no responde el quid de la cuestión. Devolviendo la porción de la url después del # – joel

9
// 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; 
0

Es 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.

En primer lugar, a veces uno quiere compartir su enlace con '#', como:

www.so.com#lala 

En primer lugar, usted puede cambiar su uso url javascript y pasar algunos datos con '?' y '#' al mismo tiempo, como:

www.so.com?foo=lala&&flag=hash#lala 

entonces, como el '#' nerver pasar al servidor, pero se 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']; 
} 

a continuación, se puede hacer todo con los datos de los '#', si quieres pasarlo al cliente, puede:

$url = $_SESSION['url']."#".$_SESSION['hash']; 
header("Location:".$url); 

Por fin, la url es volver

Cuestiones relacionadas