2009-07-21 13 views
8

Estoy tratando de encontrar una manera de guardar la porción de hash de una url y como una variable de PHP. Esta idea es un poco cursi, pero tengan paciencia ...PHP & Hash/Fragment Parte de la URL

Me gustaría extraer el fragmento de "ubicación" de la siguiente URL y guardarlo como una variable de PHP.

http://www.example.com/#location 

Sin embargo, la discusión en este link indica que el fragmento de una URL es sólo accesible a través de JavaScript.

¿Pero sería posible crear un enlace donde el fragmento está duplicado en la URL, analizado por PHP y luego eliminado por la reescritura de mods? Así que ....

url original:

http://www.example.com/location/#location 

PHP pone ubicación variables gracias a la "localización" llanura en la URL

Apache a continuación, vuelve a escribir el enlace a:

http://www.example.com/#location 

Tengo curiosidad por saber si hay una manera elegante de resolver este problema.

+2

podría cambiar el fragmento en un valor de $ _GET? –

+0

No, no puedes. Ver mi respuesta –

+0

Aquí hay una solución que usa javascript y un campo de entrada oculto http://stackoverflow.com/questions/940905/can-i-read-the-hash-portion-of-the-url-on-my-server -side-application-php-ruby/43119226 # 43119226 –

Respuesta

0

usted podría enviar fragmento de hash a través de AJAX script PHP y hacer una actualización inmediata (recarga de la página)

5

El Fragmento nunca se envía al servidor, de acuerdo con esta thread en los foros Mod_rewrite. Por lo tanto, esto podría ser imposible a menos que use AJAX para cambiar la página después del hecho.

Otra idea sería tener Javascript convertir el hash en un parámetro $ _GET, y luego actualizar la página.

+0

Gracias por las respuestas! Sé que el fragmento nunca se envía al servidor.Lo que propongo es un "pseudo fragmento" o "fragmento doble" como http://www.example.com/fragmento/#fragmento El primer fragmento sería interpretado por PHP, y luego eliminado por mod_rewrite, representando la URL como http://www.example.com/#fragment Quizás este enfoque no tenga sentido; No estoy seguro de que así sea, de ahí mi pregunta ... –

+0

Si desea enviar a la persona de regreso a example.com/#fragment, los enviaría a example.com/fragement y luego PHP podría reenviarlos a un ejemplo .com/# fragement. –

+0

Excelente idea para reenviar al usuario de "example.com/fragment" a "example.com/#fragment". Usaré una cookie para guardar el fragmento y luego reenviaré la página. Algo como esto podría funcionar: Ejemplo: enlace: http://www.example.com/test.php?fragment=turkey $ fragmento = $ _GET [ 'fragmento']; if (isset ($ fragment)) { setcookie ("TestCookie", "TestCookie", time() + 3600); encabezado ("Ubicación: http://www.example.com/test.php/#$fragment"); } // haga cosas adicionales basadas en la cookie –

9

Deberá tener Javascript para leer esto. Hay algunas opciones diferentes: al cargar la página, puede usar una solicitud XmlHTTPRequest (solicitud AJAX) para indicar al servidor cuáles son los parámetros de URL adicionales. Alternatley podría verificar si hay parámetros adicionales (también a través de Javascript), y si encuentra alguno, publique de nuevo en una URL diferente que tenga estos parámetros codificados en la propia URL.

0

Una vez que haya enviado los valores al servidor a través de AJAX. Puede establecer los valores de fragmento en SESSION. Cuando actualiza la página, puede obtener el fragmento que se estableció en la sesión y procesar y luego mostrar el contenido correspondiente. Porque no podemos obtener los valores del fragmento a través de PHP_SELF/QUERY_STRING, etc. Necesitamos esto para aumentar la velocidad de nuestra página web como Gmail.

-2

Está contenido en el valor "fragmento" devuelto por PHP's parse_url function.

De manual de PHP:

<?php 
$url = 'http://username:[email protected]/path?arg=value#anchor'; 

print_r(parse_url($url)); 

echo parse_url($url, PHP_URL_PATH); 
?> 

volveremos: el

Array 
(
    [scheme] => http 
    [host] => hostname 
    [user] => username 
    [pass] => password 
    [path] => /path 
    [query] => arg=value 
    [fragment] => anchor 
) 
/path 
+2

Esto es cierto si el fragmento se suministra manualmente a esta función, pero el problema en relación con la pregunta original es que la parte del fragmento no se envía al servidor. – halfer