Yanıtlar:
Asıl sorun, tarayıcının bir parça parçasıyla bir istek bile göndermemesi. Parça kısmı, burada tarayıcıda çözülür. Bu yüzden JavaScript aracılığıyla erişilebilir.
Her neyse, bir URL'yi parça parçası da dahil olmak üzere parse_url () kullanarak bitlere ayrıştırabilirsiniz , ancak açıkçası durumunuz bu değildir.
Basit test, http: // localhost: 8000 / hello? Foo = bar # 'a erişildi, sunucuya gönderilmedi
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 -
Sunucu #appendage olmadan isteği alır - karma etiketinden sonraki her şey istemcide bir çapa aramasıdır.
URL'de kullanılan bağlantı adını javascript aracılığıyla örnek olarak kullanarak bulabilirsiniz:
<script>alert(window.location.hash);</script>
Parçayı içeren gerekli URL dizesine zaten sahipseniz PHP'deki parse_url () işlevi çalışabilir ( http://codepad.org/BDqjtXix ):
<?
echo parse_url("http://foo?bar#fizzbuzz",PHP_URL_FRAGMENT);
?>
Output: fizzbuzz
Ancak PHP'nin sadece istemci olduğu için parça bilgilerini aldığını sanmıyorum.
Javascript'ten alınabilir - as window.location.hash
. Oradan örneğin Ajax ile sunucuya gönderebilir veya kodlayabilir ve daha sonra sunucu tarafına geçirilebilen URL'lere koyabilirsiniz.
Karma hiçbir zaman sunucuya gönderilmez, bu yüzden hayır.
Evet bu doğru, sunucu sabitleme parçasını alamıyor. Ancak, çerezleri kullanan bir geçici çözüm vardır. Burada bulabilirsiniz: http://www.stoimen.com/blog/2009/04/15/read-the-anchor-part-of-the-url-with-php/
Cevap hayır.
Karma işleminin ana amacı, sayfanın bir yer işareti tanımladığınız belirli bir bölümüne ilerlemektir. Örneğin, sayfa yüklendiğinde bu Bölüme ilerleyin.
Tarama, satırın altında ne kadar içerik izlediğine bağlı olarak, bu satır sayfadaki ilk görünür içerik olacak şekilde kayar.
Evet javascript buna erişebilir ve basit bir ajax çağrısı sihri yapacak
Ne dersin:
#Hash'ı dinamik olarak yakala
<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;
?>
Daha akıcı hale getirmek için:
Sadece Javascript ve PHP kullanarak tam örnek
<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; ?>
Ben karma değeri sadece istemci tarafında kullanılır, bu yüzden php ile elde edemezsiniz düşünüyorum.
php için javascript ile yönlendirebilirsiniz.
<?php
$url=parse_url("http://domain.com/site/gallery/1?user=12#photo45 ");
echo $url["fragment"]; //This variable contains the fragment
?>
Bu işe yaramalı
Bir URI'nin arkasına #
"parça" denir ve tanım gereği yalnızca istemci tarafında kullanılabilir / işlenir (bkz. Https://en.wikipedia.org/wiki/Fragment_identifier ).
İstemci tarafında buna javaScript ile erişilebilir window.location.hash
.
Evet yapabilirsin:
Hataları önlemek için bu yöntemi kullanın:
<script>
query=location.hash;
document.cookie= 'anchor'+query;
</script>
Ve elbette PHP'de, o köpek yavrusu patlatın ve değerlerden birini alın
$split = explode('/', $_COOKIE['anchor']);
print_r($split[1]); //to test it, use print_r. this line will print the value after the anchortag
Başka bir çözüm php sayfasına gizli bir giriş alanı eklemektir:
<input type="hidden" id="myHiddenLocationHash" name="myHiddenLocationHash" value="">
Javascript / jQuery kullanarak, sayfa yüklemesinde veya bir etkinliğe yanıt verirken bu alanın değerini ayarlayabilirsiniz:
$('#myHiddenLocationHash').val(document.location.hash.replace('#',''));
Sunucu tarafındaki php'de $ _POST koleksiyonunu kullanarak bu değeri okuyabilirsiniz:
$server_location_hash = $_POST['myHiddenLocationHash'];
Bunu başka bir yaklaşımla da yapabiliriz, her şeyden önce js'den hash değerini alın ve bu parametreyi kullanarak ajax'ı çağırın ve istediğimizi yapabilir
www.example.com/?val=1#part2
gerekirse , bunun yerine: Sunucuya yeniden yönlendirmeniz gerekir, şöyle:www.example.com/?redirectUrl=%2F%3Fval%3D1%23part2
ve elbette diğer sayfanızdaki diğer URL'ye yönlendirmek için destek eklemeniz gerekir. Harika değil ve tüm kullanım durumları için elbette çalışmıyor, ancak yer imleri için çalışıyor. Bunu yaparsanız, kendinizi güvenli olmayan yönlendirmelere