Istek dizesinde # karakter

6 Cevap

Bir PHP site örneğin gibi istendiğinde somesite.php? a = bazı metin # biraz daha

Şu anda nasıl "Bazı metin # biraz daha alabilirsiniz" dizesini "Bazı metin", döner $ _REQUEST ["a"] gibi görünüyor. PHP ile benzer tedavi olsun diğer karakterler var mı?

6 Cevap

"#" Karakteri URL şartnamede özel; Bu sayfada bir konuma gelir (gibi bir 'bir' etiketi ile adlandırılmış: <a name='top'>this is the top of the page</a>). O ve ondan sonra her şey, sunucu (php) geçmedi.

Hash (#), bir "Fragment identifier" (aynı zamanda gayrı bir "çapa" olarak bilinir) ve bir yerde within sayfa anlamına gelir - ve ' Haklısın, bu sunucuya gönderilen almaz.

Bu gibi davranır sadece URL karakter.

Eğer bir URL bir karma karakteri dahil etmek gerekiyorsa, %23 olarak kodlamak gerekir

somesite.php?a=<?=urlencode( "some text # some more" )?>

Bunu dönüşür:

somesite.php?a=some+text+%23+some+more

Sen yapamazsın. Tarayıcı sunucuya # sonra url kısmını göndermek değildir.

Yani, bu onu URL parçası görür asla kaldırır PHP değil.

Eğer buna sahip varsa, sizin için yeniden yazılan bu javascript yazabilirsiniz:

<script>

function checkHash(){
  var hash = window.location.hash;
  if(hash){
    // see if we've already included this
    var loc = window.location.pathname;
    if(!loc.indexOf('hashData=') >= 0){
      // hashData param not included
      window.location.href = loc + '&hashData=' + encodeURIComponent(hash) + hash;
    }
  }
};
checkHash();
</script>

(O çift-gönderdiğinde öğeleri gibi) bu bazı belirgin sorunlar vardır. Not - Birisi sayfada bir karma linke tıklarsa, kod yeniden çalıştırmak değil, bu yüzden değişiklikleri için karma izlemek gerekir. Siz veya bu durumda umurunda olmayabilir.

The # character, and any characters that follow it, specify and anchor. This is a point within the page that the browser will scroll to.

Bildiğim kadarıyla, bu tarayıcının kullanımı içindir, ve sunucu tarafında iletilir asla - bu sunucuya hiçbir şey demektir muhtemelen çünkü,