Ten en cuenta que en la informática un error puede tener más de una resoluciones, pero aquí enseñaremos lo más óptimo y eficiente.
Solución:
Si desea obtener el valor después de la marca hash o 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 variables predefinidas similares). 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.
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
A) ¿ya tienes una 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 explotado para acceder al array:
$exploded_url = explode( "#", $url ); $exploded_url[1];
B) ¿Quieres obtener un #hash enviando un formulario a PHP?
=> ¡Usa un poco de MAGIA de JavaScript! (Para preprocesar el formulario)
var forms = document.getElementsByTagName('form'); //get all forms on the site
for (var i = 0; i < forms.length; i++) //to each form...
forms[i].addEventListener( // add a "listener"
'submit', // for an on-submit "event"
function () //add a submit pre-processing function:
var input_name = "fragment"; // name form will use to send the fragment
// Try search whether we already done this or not
// in current form, find every
var hiddens = form.querySelectorAll('[name="' + input_name + '"]');
if (hiddens.length < 1) // if not there yet
//create an extra input element
var hidden = document.createElement("input");
//set it to hidden so it doesn't break view
hidden.setAttribute('type', 'hidden');
//set a name to get by it in PHP
hidden.setAttribute('name', input_name);
this.appendChild(hidden); //append it to the current form
else
var hidden = hiddens[0]; // use an existing one if already there
//set a value of #HASH - EVERY TIME, so we get the MOST RECENT #hash :)
hidden.setAttribute('value', window.location.hash);
);
Depende de tu form
's method
attribute obtienes este hash en PHP por:
$_GET['fragment']
o $_POST['fragment']
Posibles devoluciones: 1. ""
[empty string] (sin hash) 2. hash entero INCLUYENDO el #
[hash] firmar (porque hemos usado el window.location.hash
en JavaScript que simplemente funciona de esa manera :))
C) Quieres obtener el #hash en PHP SÓLO de la URL solicitada?
¡NO PUEDES!
... (no considerando las solicitudes HTTP regulares)...
... Espero que esto haya ayudado 🙂