obtener from current php url anchor

from - php url request



Obtener fragmento(valor después de hash ''#'') de una URL en php (8)

¿Cómo puedo obtener el fragmento (valor después del hash ''#'') de una URL en php?

Diga de http://domain.com/site/gallery/1#photo45 Quiero photo45


A) ya tiene url con #hash en PHP? ¡Fácil! ¡Solo analízalo!

if( strpos( $url, "#" ) === false ) echo "NO HASH !"; else echo "HASH IS: #".explode( "#", $url )[1]; // arrays are indexed from 0

O en PHP "antiguo" debe pre-almacenar el explosionado para acceder a la matriz:

$exploded_url = explode( "#", $url ); $exploded_url[1];

B) ¿Desea obtener un #hash enviando un formulario a PHP?
=> ¡Utiliza algo de JavaScript MAGIC! (Para preprocesar el formulario)

var forms = document.getElementsByTagName(''form''); //get all forms on the site for(var i=0; i<forms.length;i++) forms[i].addEventListener(''submit'', //to each form... function(){ //add a submit pre-processing function that will: var hidden = document.createElement("input"); //create an extra input element hidden.setAttribute(''type'',''hidden''); //set it to hidden so it doesn''t break view hidden.setAttribute(''name'',''fragment''); //set a name to get by it in PHP hidden.setAttribute(''value'',window.location.hash); //set a value of #HASH this.appendChild(hidden); //append it to the current form });

Según el atributo de method tu form , obtienes este hash en PHP de la siguiente manera:
$_GET[''fragment''] o $_POST[''fragment'']

Posibles devoluciones: 1. "" [cadena vacía] (sin hash) 2. hash completo INCLUYENDO el signo # [hash] (porque hemos utilizado el window.location.hash en JavaScript que simplemente funciona de esa manera :))

C) ¿Desea obtener #hash en PHP JUST desde la URL solicitada?

¡NO PUEDES!

... (no mientras se consideran solicitudes HTTP regulares) ...

... Espero que esto haya ayudado :)



Esa parte se llama "fragmento" y puedes obtenerla de esta manera:

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


He estado buscando una solución para esto por un tiempo, y lo único que he encontrado es usar reescrituras URL para leer el "anclaje". Encontré en los documentos de apache aquí http://httpd.apache.org/docs/2.2/rewrite/advanced.html lo siguiente ...

De forma predeterminada, redirigir a un ancla HTML no funciona, porque mod_rewrite escapa al carácter #, convirtiéndolo en% 23. Esto, a su vez, rompe la redirección.

Solución: utilice el indicador [NE] en RewriteRule. NE significa No Escape.

Discusión: Esta técnica, por supuesto, también funcionará con otros caracteres especiales que mod_rewrite, de forma predeterminada, codifica URL.

Puede tener otras advertencias y lo que no ... pero creo que al menos hacer algo con el # en el servidor es posible.


No puede obtener el texto después de la marca de almohadilla . No se envía al servidor en una solicitud.


Obtener los datos después del hashmark en una cadena de consulta es simple. Aquí hay un ejemplo utilizado para cuando un cliente accede a un glosario de términos de un libro. Toma el nombre de anclaje entregado (#tesla) y entrega al cliente ese término y resalta el término y su descripción en azul para que sea fácil de ver.

A. configura tus cadenas con una identificación div, por lo que el anclaje de nombre va donde se supone que debe y el javascript puede cambiar los colores del texto

<div id="tesla">Tesla</div> <div id="tesla1">An energy company</div>

B. Use Javascript para hacer el trabajo pesado, en el lado del servidor, insertado en su página PHP, o donde sea que ...

<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>

C. Estoy lanzando la función java automáticamente cuando la página está cargada.

<script> $( document ).ready(function() {

D. obtener el anclaje (#tesla) de la url recibida por el servidor

var myhash1 = $(location).attr(''hash''); //myhash1 == #tesla

E. recortar el signo de hash fuera de él

myhash1 = myhash1.substr(1) //myhash1 == tesla

F. Necesito resaltar el término y la descripción para crear una nueva var

var myhash2 = ''1''; myhash2 = myhash1.concat(myhash2); //myhash2 == tesla1

G. Ahora puedo manipular el color del texto para el término y la descripción

var elem = document.getElementById(myhash1); elem.style.color = ''blue''; elem = document.getElementById(myhash2); elem.style.color = ''blue''; }); </script>

H. Esto funciona. el cliente hace clic en el enlace del lado del cliente (xyz.com # tesla) y va directamente al término. el término y la descripción están resaltados en azul por javascript para una lectura rápida ... todas las demás entradas quedan en negro.


Podría hacer una cadena de reemplazo en el lado del cliente y luego en el lado del servidor. No es una solución particularmente robusta, pero si no quieres una solución rápida como yo, será suficiente, creo.

Cliente:

var tempString = stringVal.replace(''#'', ''hashtag'');

Servidor:

$user_message = $_GET[''userMessage'']; $user_message = str_replace("hashtag", "#", $user_message);


Si desea obtener el valor después de la marca o el anclaje como se muestra en el navegador de un usuario: Esto no es posible con HTTP "estándar" ya que este valor nunca se envía al servidor (por lo tanto, no estará disponible en $_SERVER["REQUEST_URI"] o variables predefinidas similares). Necesitará algún tipo de magia JavaScript en el lado del cliente, por ejemplo, para incluir este valor como un parámetro POST.

Si se trata solo de analizar una URL conocida de cualquier fuente, la respuesta de mck89 está perfectamente bien.