Posso ler a parte hash do URL no meu aplicativo do lado do servidor (PHP, Ruby, Python, etc.)?

Assumindo uma URL de:

www.example.com/?val=1#part2 

O PHP pode ler as variables ​​de requisição val1 usando o array GET.

O hash value part2 também é legível? Ou isso é apenas até o navegador e JavaScript?

O principal problema é que o navegador nem sequer envia uma solicitação com uma parte de fragment. A parte do fragment é resolvida ali mesmo no navegador. Então, é alcançável através do JavaScript.

De qualquer forma, você poderia analisar uma URL em bits, incluindo a parte do fragment, usando parse_url () , mas obviamente não é o seu caso.

Teste simples, acessando http: // localhost: 8000 / ola? Foo = bar # this-is-not-send-to-server

 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 – nada depois que a hashtag é simplesmente uma pesquisa de âncora no cliente.

Você pode encontrar o nome da âncora usado dentro do URL através do javascript usando, por exemplo:

  

A function parse_url () em PHP pode funcionar se você já tiver a string de URL necessária, incluindo o fragment ( http://codepad.org/BDqjtXix ):

  Output: fizzbuzz 

Mas eu não acho que o PHP receba as informações do fragment porque é somente cliente.

É recuperável do Javascript – como window.location.hash . De lá, você poderia enviá-lo para o servidor com o Ajax, por exemplo, ou codificá-lo e colocá-lo em URLs, que podem então ser passadas para o lado do servidor.

O hash nunca é enviado para o servidor, então não.

Sim, é verdade, o servidor não obtém a parte de â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 objective do hash é rolar para uma determinada parte da página onde você definiu um marcador. Por exemplo, vá até esta parte quando a página for carregada.

A navegação rolará de modo que essa linha seja o primeiro conteúdo visível na página, dependendo de quanto conteúdo segue abaixo da linha.

Sim javascript pode acessá-lo e, em seguida, uma simples chamada ajax fará a mágica

Eu acho que o valor de hash é usado apenas no lado do cliente, então você não pode obtê-lo com php.

você poderia redirecioná-lo com javascript para php embora.

  

Isso deve funcionar

A parte de um URI após o # é chamado de “fragment” e é, por definição, apenas disponível / processada no lado do cliente (veja 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:

  

E, claro, em PHP, explodir esse cachorro e obter 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 

Podemos fazê-lo com outra abordagem também, como antes de tudo obter o valor de hash de js e chamar o ajax usando esse parâmetro e pode fazer o que quisermos

Outra solução é adicionar um campo de input oculto à página do php:

  

Usando javascript / jQuery você pode definir o valor deste campo no carregamento da página ou responder a um evento:

 $('#myHiddenLocationHash').val(document.location.hash.replace('#','')); 

Em php no lado do servidor você pode ler este valor usando a coleção $ _POST:

 $server_location_hash = $_POST['myHiddenLocationHash'];