http url web language-agnostic uri-fragment

http - ¿Puedo leer la porción de hash de la URL en mi aplicación del lado del servidor(PHP, Ruby, Python, etc.)?



web language-agnostic (12)

Creo que el valor hash solo se usa en el lado del cliente, por lo que no se puede obtener con php.

aunque podría redirigirlo con javascript a php.

Asumiendo una URL de:

www.example.com/?val=1#part2

PHP puede leer las variables de solicitud val1 utilizando la matriz GET.

¿Es el valor hash part2 también legible? O es esto sólo hasta el navegador y JavaScript?


El hash nunca se envía al servidor, por lo que no.


El principal problema es que el navegador ni siquiera enviará una solicitud con una parte de fragmento. La parte del fragmento se resuelve allí mismo en el navegador. Así que es accesible a través de JavaScript.

De todos modos, podría analizar una URL en bits, incluida la parte del fragmento, utilizando parse_url() , pero obviamente no es su caso.


Es recuperable de Javascript - como window.location.hash . Desde allí, puede enviarlo al servidor con Ajax, por ejemplo, o codificarlo y ponerlo en direcciones URL que luego se pueden pasar al lado del servidor.


La parte de un URI después del # se llama "fragmento" y, por definición, solo está disponible / procesada en el lado del cliente (consulte https://en.wikipedia.org/wiki/Fragment_identifier ).

En el lado del cliente, se puede acceder a este mediante javaScript con window.location.hash .


La respuesta es no.

El propósito principal del hash es desplazarse a una parte determinada de la página en la que ha definido un marcador. por ejemplo, desplácese a esta parte cuando se carga la página.

La navegación se desplazará de modo que esta línea sea el primer contenido visible de la página, dependiendo de la cantidad de contenido que se encuentre debajo de la línea.

Sí, javascript puede acceder a él, y luego una simple llamada ajax hará la magia


Otra solución es agregar un campo de entrada oculto a la página php:

<input type="hidden" id="myHiddenLocationHash" name="myHiddenLocationHash" value="">

Usando javascript / jQuery puede establecer el valor de este campo en la carga de la página o responder a un evento:

$(''#myHiddenLocationHash'').val(document.location.hash.replace(''#'',''''));

En php en el lado del servidor puede leer este valor utilizando la colección $ _POST:

$server_location_hash = $_POST[''myHiddenLocationHash''];


Prueba simple, accediendo a http://localhost:8000/hello?foo=bar#this-is-not-sent-to-server

python -c "import SimpleHTTPServer;SimpleHTTPServer.test()" Serving HTTP on 0.0.0.0 port 8000 ... localhost - - [02/Jun/2009 12:48:47] code 404, message File not found localhost - - [02/Jun/2009 12:48:47] "GET /hello?foo=bar HTTP/1.1" 404 -

El servidor recibe la solicitud sin #appendage: cualquier cosa después de la etiqueta hash es simplemente una búsqueda de ancla en el cliente.

Puede encontrar el nombre de anclaje usado dentro de la URL a través de javascript usando, como ejemplo:

<script>alert(window.location.hash);</script>

La función parse_url () en PHP puede funcionar si ya tiene la cadena de URL necesaria que incluye el fragmento ( http://codepad.org/BDqjtXix ):

<? echo parse_url("http://foo?bar#fizzbuzz",PHP_URL_FRAGMENT); ?> Output: fizzbuzz

Pero no creo que PHP reciba la información del fragmento porque es solo para el cliente.


Sí tu puedes:

Utilice este método para evitar errores:

<script> query=location.hash; document.cookie= ''anchor''+query; </script>

Y por supuesto en PHP, explota ese cachorro y obtén uno de los valores.

$split = explode(''/'', $_COOKIE[''anchor'']); print_r($split[1]); //to test it, use print_r. this line will print the value after the anchortag



También podemos hacerlo con otro enfoque. Como primer lugar, obtenga el valor hash de js y llame al ajax usando ese parámetro y puede hacer lo que queramos


<?php $url=parse_url("http://domain.com/site/gallery/1?user=12#photo45 "); echo $url["fragment"]; //This variable contains the fragment ?>

Esto debe funcionar