Respostas:
O principal problema é que o navegador nem envia uma solicitação com uma parte do fragmento. A parte do fragmento é resolvida ali no navegador. Portanto, é acessível através do JavaScript.
De qualquer forma, você pode analisar uma URL em bits, incluindo a parte do fragmento, usando parse_url () , mas obviamente não é o seu caso.
Teste simples, acessando http: // localhost: 8000 / hello? Foo = bar # isto não é enviado ao servidor
python -c "import SimpleHTTPServer;SimpleHTTPServer.test()"
Serving HTTP on 0.0.0.0 port 8000 ...
localhost - - [02/Jun/2009 12:48:47] code 404, message File not found
localhost - - [02/Jun/2009 12:48:47] "GET /hello?foo=bar HTTP/1.1" 404 -
O servidor recebe a solicitação sem o #appendage - qualquer coisa após a tag hash é simplesmente uma pesquisa de âncora no cliente.
Você pode encontrar o nome da âncora usado no URL via javascript usando, como exemplo:
<script>alert(window.location.hash);</script>
A função parse_url () no PHP pode funcionar se você já tiver a string de URL necessária, incluindo o fragmento ( http://codepad.org/BDqjtXix ):
<?
echo parse_url("http://foo?bar#fizzbuzz",PHP_URL_FRAGMENT);
?>
Output: fizzbuzz
Mas não acho que o PHP receba as informações do fragmento porque são apenas para clientes.
É recuperável a partir de Javascript - as window.location.hash
. A partir daí, você pode enviá-lo ao servidor com o Ajax, por exemplo, ou codificá-lo e colocá-lo em URLs que podem ser passadas para o lado do servidor.
O hash nunca é enviado para o servidor, então não.
Sim, é verdade, o servidor não recebe a parte âncora. No entanto, há uma solução alternativa usando cookies. Você pode encontrá-lo aqui: http://www.stoimen.com/blog/2009/04/15/read-the-anchor-part-of-the-url-with-php/
A resposta é não.
O principal objetivo do hash é rolar para uma determinada parte da página em que você definiu um marcador. Por exemplo, role para esta parte quando a página for carregada.
A navegação será rolada de modo que esta linha seja o primeiro conteúdo visível na página, dependendo da quantidade de conteúdo que se segue abaixo da linha.
Sim, o javascript pode acessá-lo e, em seguida, uma simples chamada ajax fará a mágica
A respeito:
Agarre dinamicamente o #hash
<script>
var urlhash = window.location.hash, //get the hash from url
txthash = urlhash.replace("#", ""); //remove the #
//alert(txthash);
</script>
<?php
$hash = "<script>document.writeln(txthash);</script>";
echo $hash;
?>
Para torná-lo mais fluente:
Exemplo completo usando apenas Javascript e PHP
<script>
var urlhash = window.location.hash, //get the hash from url
txthash = urlhash.replace("#", ""); //remove the #
function changehash(a,b){
window.location.hash = b; //add hash to url
//alert(b); //alert to test
location.reload(); //reload page to show the current hash
}
</script>
<?php $hash = "<script>document.writeln(txthash);</script>";?>
<a onclick="changehash(this,'#hash1')" style="text-decoration: underline;cursor: pointer;" >Change to #hash1</a><br/>
<a onclick="changehash(this,'#hash2')" style="text-decoration: underline;cursor: pointer;">Change to #hash2</a><br/>
<?php echo "This is the current hash: " . $hash; ?>
Eu acho que o valor de hash é usado apenas no lado do cliente, então você não pode obtê-lo com php.
você pode redirecioná-lo com javascript para php.
<?php
$url=parse_url("http://domain.com/site/gallery/1?user=12#photo45 ");
echo $url["fragment"]; //This variable contains the fragment
?>
Isso deve funcionar
A parte de um URI após o #
nome é "fragmento" e, por definição, só está disponível / processada no lado do cliente (consulte https://en.wikipedia.org/wiki/Fragment_identifier ).
No lado do cliente, isso pode ser acessado usando javaScript com window.location.hash
.
Sim você pode:
Use este método para evitar erros:
<script>
query=location.hash;
document.cookie= 'anchor'+query;
</script>
E, claro, em PHP, exploda esse filhote e obtenha um dos valores
$split = explode('/', $_COOKIE['anchor']);
print_r($split[1]); //to test it, use print_r. this line will print the value after the anchortag
Outra solução é adicionar um campo de entrada oculto à página php:
<input type="hidden" id="myHiddenLocationHash" name="myHiddenLocationHash" value="">
Usando javascript / jQuery, você pode definir o valor desse campo no carregamento da página ou responder a um evento:
$('#myHiddenLocationHash').val(document.location.hash.replace('#',''));
No php do lado do servidor, você pode ler esse valor usando a coleção $ _POST:
$server_location_hash = $_POST['myHiddenLocationHash'];
Também podemos fazer isso com outra abordagem. Como, em primeiro lugar, obtenha o valor de hash de js e chame o ajax usando esse parâmetro e faça o que quisermos
www.example.com/?val=1#part2
você teria que redirecionar para ele no servidor, assim:www.example.com/?redirectUrl=%2F%3Fval%3D1%23part2
e, claro, você teria que adicionar suporte para redirecionar para o outro URL em sua outra página. Não é impressionante, e não funciona para todos os casos de uso, é claro, mas funciona para indicadores. Note que se você fizer isso, você não deve permitir que os redirecionamentos URLs absolutos, apenas URLs relativos, para garantir que você não se abrir para redirecionamentos inseguras