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 :)
Encontré este truco, si insistes en querer el valor con php ... divide el valor de anclaje (#) y obténgalo con javascript, luego almacena como cookie, luego de eso obtén el valor de la cookie con php ~
http://www.stoimen.com/blog/2009/04/15/read-the-anchor-part-of-the-url-with-php/
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.