Comunidad de diseño web y desarrollo en internet online

Recuperar el valor "hash" de la URL mediante PHP

Citar            
MensajeEscrito el 11 Mar 2009 01:07 pm
Saludos.
Soy nuevo por aquí escribiendo, aunque ya tengo leídos muchos de sus útiles manuales...
A lo que voy...

¿Existe manera de recuperar, MEDIANTE PHP, el valor de la URL tras la "almoadilla" (#)?

EJEMPLO:
Tenemos el script de php: "script.php", que será el que deberá capturar el hash.
Navegamos a la dirección URL...
http://www.servidor.ext/path/script.php?variable=valor#hash


En JavaScript, que domino, sería:
alert(window.location.hash);
Ello, me devolvería "#hash".

¿Cuál sería la manera de recuperar este valor en PHP? ¿o no existe la manera?
He probado con algunas variables predefinidas, pero no devuelven el hash, sino el campo "search"
<?php
echo $_SERVER['QUERY_STRING'] /* retorna: casa=2 */
echo $_SERVER['REQUEST_URI'] /* retorna: /script.php?casa=2 */
echo $_SERVER['PHP_SELF'] -> /* retorna: /script.php */
?>


¿Se podría hacer modificando la URL, mediante el .htaccess, de manera que la "#", se transformase en "?"?
(no me gustaría que esta fuera la única vía de lograrlo)



Muchas Gracias.

Por david_82

8 de clabLevel



 

firefox
Citar            
MensajeEscrito el 11 Mar 2009 01:55 pm
sigo investigando.
Empieza a valerme la solución por .htaccess, aunque tampoco la encuentro.
Podría ser algo parecido a esto:

escribió:

RewriteRule ^a.php#(.*)$ "/a.php?$1"

Debería de funcionar así:
http://www.server.ext/script.php#hash
lo procesaría como:
http://www.server.ext/script.php?hash
que ya entonces podría leer mediante PHP:
$__SERVER['QUERY_STRING'] -> hash


Es decir... así, transformaría los "#", en "?", y de esta manera, podría capturarlos por los medios arriba descritos.
El problema, es que el "#", parece no ser reconocido o procesado por el servidor cuando ejecuta los comandos del .htaccess.

Si lo cambiaramos por cualquier otro caracter, funcionaría:

escribió:

RewriteRule ^a.phpF(.*)$ "/a.php?$1"

Por este método, si escribo:
http://www.server.ext/script.phpFhash
lo procesa como:
http://www.server.ext/script.php?hash
que ya puede ser leído mediante PHP:
$__SERVER['QUERY_STRING'] -> hash


El problema, es que tengo que hacerlo mediante el "#". por otros motivos... y es algo que no puede ser cambiado.

¿Porqué me encebollo en usar el "#"?
Porque cuando se ejecuta desde una página ya cargada... no hace que se recargue la página, de manera que si tengo:
http://www.server.ext/script.php, y paso a la URL: http://www.server.ext/script.php#hash, no me recarga la página.
En cambio, si estoy en http://www.server.ext/script.php, y paso a la URL: http://www.server.ext/script.phpFhash, sí que se recarga la página entera (y es lo que quiero evitar)


El problema surge, al querer cambiar la URL de una página (la URL que muestra el navegador, en la barra de "dirección"), y que NO SE RECARGUE LA PÁGINA por ello (cosa que sólo se consigue, si el cambio, va detrás de una "#")

Por david_82

8 de clabLevel



 

firefox
Citar            
MensajeEscrito el 12 Mar 2009 06:41 pm
mmm... ¿ningún master de PHP puede echarme una manita con esto?
maikel, inyaka, tribak, sisco, dano... he leído algunas muy buenas respuestas vuestras...
¿se os ocurre algo para mi "inquietud"?

Por david_82

8 de clabLevel



 

firefox
Citar            
MensajeEscrito el 12 Mar 2009 06:48 pm
Lo siento david_82, el #hash es arquitectura del lado del cliente, unicamente, esa parte de una url no es enviada al servidor. solo para fines del navegador.

Por LongeVie

Claber

1741 de clabLevel

1 tutorial

Genero:Masculino  

En un lugar, re moto.

firefox
Citar            
MensajeEscrito el 12 Mar 2009 06:51 pm
Se me ocurre que obtengas el hash mediante javascript y con ajax se lo envies al servidor. :D

Por LongeVie

Claber

1741 de clabLevel

1 tutorial

Genero:Masculino  

En un lugar, re moto.

firefox
Citar            
MensajeEscrito el 12 Mar 2009 07:00 pm
jaja, ya estoy postee y postee, bueno eske se me ocurren mas cosas.

En teoria el has no se envia desde el navegador al servidor, perooo, la funcion parse_url es capaz de reconocer el hash :?

Código PHP :

<?php
$url = 'http://username:password@hostname/path?arg=value#anchor';

print_r(parse_url($url));

echo parse_url($url, PHP_URL_PATH);
echo parse_url($url, PHP_URL_FRAGMENT);
?>


:?

Por LongeVie

Claber

1741 de clabLevel

1 tutorial

Genero:Masculino  

En un lugar, re moto.

firefox
Citar            
MensajeEscrito el 12 Mar 2009 07:14 pm
:P Se me ocurrio otra cosa, mira por ejemplo crear una funcion javascript que despache tus url y redireccione:

Código Javascript :

function get_url( aux )
{
   location.href='http://www.tuweb.com/despacha_urls.php?'url='+encodeURIComponent(aux)
}


Donde despacha_urls.php contiene "parse_url", entonces ya podrias saber el valor del hash, desde ese mismo script redireccionas. aunque veo que no funciona con direcciones relativas, haci que se tendrian que pasar direcciones absolutas o hacer un pequeño script que concaten la relacion relativa con el resto de la url para forma una url absoluta.

Esta solucion tendria el problema de que todo el trafico se centra en redirecciones y ademas, si el usuario invoca desde el navegador la url con el valor hash, pues ahi si, ya no le llega al servidor.

Bueno, es todo lo que se me pudo ocurrir, espero que Maikel o Dano o algun otro master te pueda dar ayudar mas. Suerte.

Por LongeVie

Claber

1741 de clabLevel

1 tutorial

Genero:Masculino  

En un lugar, re moto.

firefox
Citar            
MensajeEscrito el 13 Mar 2009 06:37 am

LongeVie escribió:

[...] si el usuario invoca desde el navegador la url con el valor hash, pues ahi si, ya no le llega al servidor [...]
Jeje...
esa es justo la cuestión que me ocupa...

Lo que necesito, es que el servidor capture un hash, que le llegue directamente... sin contar con javascript de por medio, pues puede que el navegador en cuestión, no lo tenga activado, o simplemente, no disponga de él (caso de google)

Y el motivo de usar el hash (el "#") para pasar variables... es que el navegaador, no recargue la página durante toda la sesión, pero que sí cambie la barra de direcciones, de manera que los cambios queden reflejados tanto en la URL, como en el historial, y que el estado, pueda ser almacenado también en favoritos.

Si tenemos enlaces en nuestra página, tal que href="#uno", href="#dos", podemos ejecutarlos, y tomar variables de ellos, y realizar acciones (AJAX), y los cambios, se irán reflejando en la URL, pero SIN REFRESCAR LA PÁGINA.
Así, en cualquier momento, se podrá guardar la URL en favoritos, y se podrá navegar por cada estado, desde el historial.

Pero al volver a la URL... desde fav, o desde google... si ya se tiene el javascript apagado... no se podrá reproducir el cambio sujerido por el hash, si no es mediante la intervención del servidor.
Y de ahí, mi necesidad de que el servidor, sea capaz de capturarlo sin pasos intermedios pasando por el cliente.



Muchas gracias por informarme sobre la existencia de "parse_url". En esta ocasión, no cumple con lo que pido... pero me será útil para otras cosillas... :)

Por david_82

8 de clabLevel



 

firefox
Citar            
MensajeEscrito el 13 Mar 2009 12:44 pm

LongeVie escribió:

...o algun otro master...
¿Alguien me llamó?... Jajaja solo bromeo ^^

Estoy trasnochado...

Por KB-27

Claber

301 de clabLevel



 

My very secret HQ

firefox
Citar            
MensajeEscrito el 13 Mar 2009 04:36 pm
pues menos trasnochar, y más contestar

xD

Por david_82

8 de clabLevel



 

firefox
Citar            
MensajeEscrito el 13 Mar 2009 04:47 pm
El hash, sin Javascript solo sirve para navegar entre anchors, no puedes cambiar contenido con hash sin Javascript. Para cambiar el contenido mediante hash, es a huevo con AJAX. Te lo tengo que decir así para que te quites la idea de hacerlo sin AJAX. Si quieres navegación dinámica con HASH a fuerzas debes utilizar AJAX. Si te interesan los usuarios sin JS o los bots como google, pues deberás construir dos versiones de tu web, una con HASH y AJAX, y la otra sin JS.

Cualquier duda me dices.

saludos

Por Dano

BOFH

4273 de clabLevel

14 tutoriales
4 articulos
10 ejemplos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Lugar estratégico para vigilarte

firefox
Citar            
MensajeEscrito el 13 Mar 2009 04:54 pm

david_82 escribió:

mmm... ¿ningún master de PHP puede echarme una manita con esto?
maikel, inyaka, tribak, sisco, dano... he leído algunas muy buenas respuestas vuestras...
¿se os ocurre algo para mi "inquietud"?


Dano y yo lo hicimos en un proyecto, y fue como te dice él usando AJAX.

saludos

Por Maikel

BOFH

5575 de clabLevel

22 tutoriales
5 articulos

Genero:Masculino   Team Cristalab

Claber de baja indefinida

firefox
Citar            
MensajeEscrito el 13 Mar 2009 08:33 pm

Dano escribió:

[...] Te lo tengo que decir así para que te quites la idea de hacerlo sin AJAX[...]
Aunque me hayas dado una gran desilusión, me alegro de que ya me haya quedado claro.

Efectivamente, tengo intención de hacerlo con AJAX (de ahí el uso de la "almoadilla" (#))... pero esperaba poder capturarla desde php, en caso de que accediera un navegador sin javascript.

Tendré que pensar alguna alternativa para cumplir con los dos requisitos.

Muchas gracias de nuevo.

Y saludos.

Por david_82

8 de clabLevel



 

firefox
Citar            
MensajeEscrito el 13 Mar 2009 10:43 pm

david_82 escribió:

Dano escribió:

[...] Te lo tengo que decir así para que te quites la idea de hacerlo sin AJAX[...]
Aunque me hayas dado una gran desilusión, me alegro de que ya me haya quedado claro.

Efectivamente, tengo intención de hacerlo con AJAX (de ahí el uso de la "almoadilla" (#))... pero esperaba poder capturarla desde php, en caso de que accediera un navegador sin javascript.

Tendré que pensar alguna alternativa para cumplir con los dos requisitos.

Muchas gracias de nuevo.

Y saludos.


Bueno, lo tenias que leer de manos de los masters!! :cool:

Por LongeVie

Claber

1741 de clabLevel

1 tutorial

Genero:Masculino  

En un lugar, re moto.

firefox
Citar            
MensajeEscrito el 17 Abr 2011 06:18 pm
Todo radica en que es lo que deseas hacer, digo esto pues este es un punto de inflexión que denotará la naturaleza de las URL's manejadas por tu web, por ejemplo si lo que haces es una aplicación web (paneles administrativos, configuración de un CMS, etc) entonces aquí no es necesario y tampoco conveniente que tus URL's sean conocidas o más bien accesibles de manera directa, en cambio si lo que tienes es un sitio web (blog, CMS, red social, etc) puede que sea necesario y beneficioso el hecho de dinfundir o más bien compartir tus URL's.

Ahora bien, ¿Qué sucede si lo que tienes es una mezcla de ambos? una aplicación web que a la vez es un sitio de difusión de contenido, pues este tercer tipo es el que está en crecimiento hoy en día, ejemplos: Twitter, Facebook, Quorra, LifeHacker y la lista sigue...
Ahora si visitas cada uno de esos sitios notarás que el uso de JavaScript está a la orden del día pues son "aplicaciones web" que hacen uso de su sitio como una RIA (Rich Internet Aplication), así que creo que es más que suficiente para corroborar que AJAX es necesario, que luego surge el aunto este de que pasa con los motores de búsqueda al utilizar semejante cosa,... pues para eso se ha definido el HashBang (#!), que aunque suena raro es una especificación creada por Google para que sus "crawlers" rastreen las URL's de este tipo:

Aquí se puede leer a detalle la especificación: http://code.google.com/intl/es-ES/web/ajaxcrawling/docs/getting-started.html

P.D: Para los que son un tanto curiosos, ya habrán notado este detalle del HashBang en los sitios mencionados arriba pues como es obvio siendo aplicaciones web de difusión social necesitan estar rankeadas en los motores de búsqueda.

Saludos.

Por DrMartin

7 de clabLevel



Genero:Masculino  

web developer, geek, idealist

chrome

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.