2009-12-24 15 views
5

alguien aquí en SO me dijo que el hash (#) en la url podría ser recuperado por la función php parse_url? ¿Es esto cierto?recuperar el hash en la url con php?

mi sitio web tiene muchos efectos ajax y quiero poder pasar una url con un hash al index.php para que pueda mostrar la información en función de los valores hash.

por ejemplo. si un usuario hace clic y navega en mi sitio web y encuentra algo que quiere compartir, puede copiar la dirección y enviársela a su amigo, y cuando esta persona entra, ve la misma cosa.

intenté usar javascript para guardar los valores hash en las cookies pero eso no funciona con Firefox y es demasiado lento en safari (el html se mostrará primero, por lo que hay que actualizar la página una segunda vez para que el contenido sea correcto ser mostrado).

cualquier otra solución es bienvenida

EDIT: im muy confused..if yo uso el parse_url tengo que escribir la dirección a mí mismo en PHP para obtener el hash? ¿Cuál es el punto entonces ... mi pregunta es si mi amigo puede ingresar la URL con # valores y php podría procesarlo? parece un no, ¿estoy en lo cierto?

+1

un código de ejemplo de lo quieres decir que sería útil. – Myles

+0

PHP puede procesarlo si envía la cadena al servidor. Puede hacer esto a través de ajax, una publicación de formulario, etc. – Sampson

+0

pero no a través del navegador web cuando el usuario lo ingrese ¿verdad? – ajsie

Respuesta

5

parse_url() puede obtener el hash de una cadena de url. Tenga en cuenta la firma:

mixed parse_url (string $url [, int $component = -1 ]) 

Ya debe conocer la cadena. Por ejemplo, a partir de los documentos:

<?php 

    $url = 'http://username:[email protected]/path?arg=value#anchor'; 
    print_r(parse_url($url)); 
    echo parse_url($url, PHP_URL_PATH); 

?> 

Salidas

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

véase la entrada bajo clave "fragmento".

+0

así que significa no? – ajsie

+0

No necesariamente. Puede pasar la cadena al servidor y luego usar parse_url. – Sampson

+1

Puede acceder a ese valor hash en javascript con 'window.location.hash' – Sampson

11

El hash en la URL ni siquiera obtiene en el servidor. No hay forma de que pueda acceder desde cualquier lenguaje de programación del lado del servidor.

0

alguien aquí en SO me dijo que el almohadilla (#) en la url podría ser recuperada por parse_url función de php? ¿Es esto cierto?

Sí:

parse_url('http://stackoverflow.com/questions/1957030/retrieve-the-hash-in-the-url-with-php/1957040#1957040', PHP_URL_FRAGMENT); // 1957040 

Pero no se puede determinar el hash en el lado del servidor sin conocer la URL completa a priori, no está seguro si el HTTP_REFERER mantiene este hash (no creo).

Cuestiones relacionadas