¿Cómo puedo seleccionar el fragmento después del símbolo '#' en mi URL usando PHP?
El resultado que quiero es "photo45".
Esta es una URL de ejemplo:
http://example.com/site/gallery/1#photo45
¿Cómo puedo seleccionar el fragmento después del símbolo '#' en mi URL usando PHP?
El resultado que quiero es "photo45".
Esta es una URL de ejemplo:
http://example.com/site/gallery/1#photo45
Respuestas:
Si desea obtener el valor después de la marca de almohadilla o del ancla 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 similar variables predefinidas). Necesitaría algún tipo de magia de JavaScript en el lado del cliente, por ejemplo, para incluir este valor como un parámetro POST.
Sin embargo, si solo se trata de analizar una URL conocida de cualquier fuente, la respuesta de mck89 está perfectamente bien.
alert(window.location.hash);
window.location.hash
obtiene el fragmento completo INCLUYENDO el #
signo [hash] ... y está, por supuesto, en JavaScript :)
var forms = document.getElementsByTagName('form'); for(var i=0; i<forms.length;i++) forms[i].addEventListener('submit',function(){ var hidden = document.createElement("input"); hidden.setAttribute('type','hidden'); hidden.setAttribute('name','fragment'); hidden.setAttribute('value',window.location.hash); this.appendChild(hidden); });
... dependiendo del "método" de su formulario, obtiene el hash por $_POST['fragment']
o $_GET['fragment']
.... ¡MAGIC!
Esa parte se llama "fragmento" y puede obtenerla de esta manera:
$url=parse_url("http://domain.com/site/gallery/1#photo45 ");
echo $url["fragment"]; //This variable contains the fragment
$fragment = parse_url("http://example.com/site/gallery/1#photo45", PHP_URL_FRAGMENT);
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 explotado para acceder a la matriz:
$exploded_url = explode( "#", $url ); $exploded_url[1];
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
});
Dependiendo de sus form
's method
atributo se obtiene este hash en PHP por:
$_GET['fragment']
o$_POST['fragment']
Retornos posibles: 1. ""
[cadena vacía] (sin hash) 2. hash completo INCLUYENDO el #
signo [hash] (porque hemos usado window.location.hash
en JavaScript que simplemente funciona de esa manera :))
... (no teniendo en cuenta las solicitudes HTTP regulares) ...
... Espero que esto haya ayudado :)
He estado buscando una solución para esto durante un tiempo, y lo único que he encontrado es usar reescrituras de URL para leer el "ancla". Encontré en los documentos de Apache aquí http://httpd.apache.org/docs/2.2/rewrite/advanced.html lo siguiente ...
De forma predeterminada, la redirección a un ancla HTML no funciona, porque mod_rewrite escapa del carácter #, convirtiéndolo en% 23. Esto, a su vez, rompe la redirección.
Solución: use la marca [NE] en RewriteRule. NE significa No Escape.
Discusión: Esta técnica, por supuesto, también funcionará con otros caracteres especiales que mod_rewrite, por defecto, codifica URL.
Puede tener otras advertencias y otras cosas ... pero creo que al menos es posible hacer algo con el # en el servidor.
No puede obtener el texto después de la marca de almohadilla . No se envía al servidor en una solicitud.
Encontré este truco si insistes en querer el valor con PHP. divida el #
valor de anchor ( ) y consígalo con JavaScript, luego guárdelo como cookie, luego obtenga el valor de cookie con PHP
Puede hacerlo mediante una combinación de javascript y php:
<div id="cont"></div>
Y por el otro lado;
<script>
var h = window.location.hash;
var h1 = (win.substr(1));//string with no #
var q1 = '<input type="text" id="hash" name="hash" value="'+h1+'">';
setInterval(function(){
if(win1!="")
{
document.querySelector('#cont').innerHTML = q1;
} else alert("Something went wrong")
},1000);
</script>
Luego, al enviar el formulario, puede recuperar el valor a través de $ _POST ['hash'] (establecer el formulario)
Si desea obtener dinámicamente el hash de la URL, esto debería funcionar: https://stackoverflow.com/a/57368072/2062851
<script>
var hash = window.location.hash, //get the hash from url
cleanhash = hash.replace("#", ""); //remove the #
//alert(cleanhash);
</script>
<?php
$hash = "<script>document.writeln(cleanhash);</script>";
echo $hash;
?>
Primero debe analizar la URL, por lo que es así:
$url = "https://www.example.com/profile#picture";
$fragment = parse_url($url,PHP_URL_FRAGMENT); //this variable holds the value - 'picture'
Si necesita analizar la URL real del navegador actual, debe solicitar llamar al servidor.
$url = $_SERVER["REQUEST_URI"];
$fragment = parse_url($url,PHP_URL_FRAGMENT); //this variable holds the value - 'picture'
$_SERVER['REQUEST_URI']
no no incluye el #fragment
Obtener los datos después de la marca de almohadilla en una cadena de consulta es simple. A continuación, se muestra un ejemplo que se utiliza cuando un cliente accede a un glosario de términos de un libro. Toma el ancla de nombre entregado (#tesla), 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. configure sus cadenas con un id div, por lo que el nombre del ancla 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. Utilice Javascript para hacer el trabajo pesado, en el lado del servidor, insertado en su página PHP o donde sea.
<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
C. Estoy iniciando la función Java automáticamente cuando se carga la página.
<script>
$( document ).ready(function() {
D. obtener el ancla (#tesla) de la URL recibida por el servidor
var myhash1 = $(location).attr('hash'); //myhash1 == #tesla
E. recortar el signo de almohadilla
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 del 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 ..