回答:
主な問題は、ブラウザがフラグメント部分を含むリクエストを送信しないことです。フラグメント部分は、ブラウザーで直接解決されます。つまり、JavaScriptを介して到達可能です。
とにかく、parse_url()を使用して、フラグメント部分を含むビットにURLを解析できますが、それは明らかにあなたの場合ではありません。
http:// localhost:8000 / hello?foo = bar#this-is-not-sent-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 -
サーバーは#appendageなしでリクエストを受信します-ハッシュタグの後はクライアントのアンカールックアップにすぎません。
例として、JavaScriptを使用してURL内で使用されているアンカー名を見つけることができます。
<script>alert(window.location.hash);</script>
PHPのparse_url()関数は、フラグメントを含む必要なURL文字列(http://codepad.org/BDqjtXix)がすでにある場合に機能します。
<?
echo parse_url("http://foo?bar#fizzbuzz",PHP_URL_FRAGMENT);
?>
Output: fizzbuzz
しかし、PHPはクライアントのみであるため、フラグメント情報を受信しないと思います。
Javascript-asとして取得できwindow.location.hash
ます。そこから、たとえばAjaxを使用してサーバーに送信したり、エンコードしてURLに入れたりして、サーバー側に渡すことができます。
ハッシュがサーバーに送信されることはないので、送信されません。
はい、そうです。サーバーはアンカー部分を取得しません。ただし、Cookieを使用する回避策があります。ここで見つけることができます:http : //www.stoimen.com/blog/2009/04/15/read-the-anchor-part-of-the-url-with-php/
何について:
#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;
?>
より流暢にするには:
JavaScriptと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; ?>
ハッシュ値はクライアント側でのみ使用されるので、phpでは取得できません。
ただし、JavaScriptを使用してphpにリダイレクトすることもできます。
<?php
$url=parse_url("http://domain.com/site/gallery/1?user=12#photo45 ");
echo $url["fragment"]; //This variable contains the fragment
?>
これはうまくいくはずです
の後のURIの一部は#
「フラグメント」と呼ばれ、定義上、クライアント側でのみ利用可能/処理されます(https://en.wikipedia.org/wiki/Fragment_identifierを参照)。
クライアント側では、これにjavaScriptを使用してアクセスできますwindow.location.hash
。
別の解決策は、phpページに非表示の入力フィールドを追加することです。
<input type="hidden" id="myHiddenLocationHash" name="myHiddenLocationHash" value="">
javascript / jQueryを使用すると、ページの読み込み時またはイベントへの応答時にこのフィールドの値を設定できます。
$('#myHiddenLocationHash').val(document.location.hash.replace('#',''));
サーバー側のphpでは、$ _ POSTコレクションを使用してこの値を読み取ることができます。
$server_location_hash = $_POST['myHiddenLocationHash'];
www.example.com/?val=1#part2
、次のようにサーバー上でリダイレクトする必要があります。www.example.com/?redirectUrl=%2F%3Fval%3D1%23part2
もちろん、他のページの他のURLにリダイレクトするためのサポートを追加する必要があります。すばらしいわけではなく、もちろんすべてのユースケースで機能するわけではありませんが、ブックマークでは機能します。これを行う場合、危険なリダイレクトに