Saltar al contenido

Obtener fragmento (valor después del hash ‘#’) de una URL en php

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 🙂

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *