PHPを使用して、URLの「#」記号の後のフラグメントをどのように選択できますか?
欲しい結果は「photo45」です。
これはURLの例です。
http://example.com/site/gallery/1#photo45
PHPを使用して、URLの「#」記号の後のフラグメントをどのように選択できますか?
欲しい結果は「photo45」です。
これはURLの例です。
http://example.com/site/gallery/1#photo45
回答:
あなたは、ユーザーのブラウザに示すように、ハッシュマークやアンカー後の値を取得したい場合:これは、「標準」HTTPでは不可能である、この値がサーバーに送信されることはありませんよう(したがって、それはで使用することはできません$_SERVER["REQUEST_URI"]
または類似定義済み変数)。この値をPOSTパラメータとして含めるなど、クライアントサイドで何らかのJavaScriptマジックが必要になります。
それがどんなソースからの既知のURLを解析することだけであるならば、mck89による答えは完全にすばらしいです。
alert(window.location.hash);
window.location.hash
フラグメント全体を取得します#
...そしてもちろん、JavaScriptで記述されています:)
var forms = document.getElementsByTagName('form'); for(var i=0; i<forms.length;i++) forms[i].addEventListener('submit',function(){ var hidden = document.createElement("input"); hidden.setAttribute('type','hidden'); hidden.setAttribute('name','fragment'); hidden.setAttribute('value',window.location.hash); this.appendChild(hidden); });
...フォームの「メソッド」に応じて、ハッシュを取得する$_POST['fragment']
か、$_GET['fragment']
...マジックです。
その部分は「フラグメント」と呼ばれ、次の方法で取得できます。
$url=parse_url("http://domain.com/site/gallery/1#photo45 ");
echo $url["fragment"]; //This variable contains the fragment
$fragment = parse_url("http://example.com/site/gallery/1#photo45", PHP_URL_FRAGMENT);
if( strpos( $url, "#" ) === false ) echo "NO HASH !";
else echo "HASH IS: #".explode( "#", $url )[1]; // arrays are indexed from 0
または、「古い」PHPでは、配列にアクセスするために分解されたものを事前に保存する必要があります。
$exploded_url = explode( "#", $url ); $exploded_url[1];
var forms = document.getElementsByTagName('form'); //get all forms on the site
for(var i=0; i<forms.length;i++) forms[i].addEventListener('submit', //to each form...
function(){ //add a submit pre-processing function that will:
var hidden = document.createElement("input"); //create an extra input element
hidden.setAttribute('type','hidden'); //set it to hidden so it doesn't break view
hidden.setAttribute('name','fragment'); //set a name to get by it in PHP
hidden.setAttribute('value',window.location.hash); //set a value of #HASH
this.appendChild(hidden); //append it to the current form
});
あなたに応じてform
のmethod
属性あなたはでPHPで、このハッシュを取得します:
$_GET['fragment']
または$_POST['fragment']
可能な戻り値: 1. ""
[空の文字列](ハッシュなし)2. #
[ハッシュ]記号を含む全体のハッシュ(window.location.hash
JavaScriptでを使用しているため、このように機能します:))
...(通常のHTTPリクエストを考慮していない場合)...
...これが役に立てば幸い:)
私はこれに対する回避策を少し探してきました-私が見つけた唯一のことは、URL書き換えを使用して「アンカー」を読み取ることです。私はここのhttp://httpd.apache.org/docs/2.2/rewrite/advanced.html以下のapacheドキュメントで見つけました...
デフォルトでは、mod_rewriteが#文字をエスケープして%23に変換するため、HTMLアンカーへのリダイレクトは機能しません。これにより、リダイレクトが中断されます。
解決策:RewriteRuleで[NE]フラグを使用します。NEはNo Escapeの略です。
ディスカッション:この手法はもちろん、mod_rewriteがデフォルトでURLエンコードする他の特殊文字でも機能します。
他の注意点があるかもしれませんが、そうではありません...しかし、少なくともサーバーで#を使用して何かを行うことは可能だと思います。
ハッシュマークの後のテキストは取得できません。リクエストではサーバーに送信されません。
PHPで値を求めている場合は、このトリックを見つけました。アンカー(#
)値を分割してJavaScriptで取得し、Cookieとして保存します。その後、PHPでCookie値を取得します
あなたはjavascriptとphpの組み合わせでそれを行うことができます:
<div id="cont"></div>
そして反対側で。
<script>
var h = window.location.hash;
var h1 = (win.substr(1));//string with no #
var q1 = '<input type="text" id="hash" name="hash" value="'+h1+'">';
setInterval(function(){
if(win1!="")
{
document.querySelector('#cont').innerHTML = q1;
} else alert("Something went wrong")
},1000);
</script>
次に、フォームの送信時に$ _POST ['hash']を介して値を取得できます(フォームを設定します)
URLからハッシュを動的に取得したい場合、これは機能するはずです:https : //stackoverflow.com/a/57368072/2062851
<script>
var hash = window.location.hash, //get the hash from url
cleanhash = hash.replace("#", ""); //remove the #
//alert(cleanhash);
</script>
<?php
$hash = "<script>document.writeln(cleanhash);</script>";
echo $hash;
?>
最初にURLを解析する必要があるため、次のようになります。
$url = "https://www.example.com/profile#picture";
$fragment = parse_url($url,PHP_URL_FRAGMENT); //this variable holds the value - 'picture'
現在のブラウザの実際のURLを解析する必要がある場合は、サーバーの呼び出しを要求する必要があります。
$url = $_SERVER["REQUEST_URI"];
$fragment = parse_url($url,PHP_URL_FRAGMENT); //this variable holds the value - 'picture'
$_SERVER['REQUEST_URI']
いません
クエリ文字列のハッシュマークの後にデータを取得するのは簡単です。以下は、クライアントが本から用語集にアクセスする場合に使用される例です。配信されたアンカー名(#tesla)を受け取り、クライアントをその用語に配信し、用語とその説明を青色で強調表示して見やすくします。
A. div idを使用して文字列を設定し、名前のアンカーが想定どおりに移動し、JavaScriptがテキストの色を変更できるようにします
<div id="tesla">Tesla</div>
<div id="tesla1">An energy company</div>
B. JavaScriptを使用して、サーバー側で、PHPページに挿入されてなど、重い作業を行います。
<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
C.ページが読み込まれたときにjava関数を自動的に起動しています。
<script>
$( document ).ready(function() {
D.サーバーが受信したURLからアンカー(#tesla)を取得する
var myhash1 = $(location).attr('hash'); //myhash1 == #tesla
E.ハッシュ記号を削除する
myhash1 = myhash1.substr(1) //myhash1 == tesla
F.用語と説明を強調表示して、新しい変数を作成する必要がある
var myhash2 = '1';
myhash2 = myhash1.concat(myhash2); //myhash2 == tesla1
G.これで、用語と説明のテキストの色を操作できます
var elem = document.getElementById(myhash1);
elem.style.color = 'blue';
elem = document.getElementById(myhash2);
elem.style.color = 'blue';
});
</script>
H.これは機能します。クライアントはクライアント側のリンク(xyz.com#tesla)をクリックして、用語に直接進みます。用語と説明は、読みやすくするためにJavaScriptによって青で強調表示されます。他のすべてのエントリは黒で残ります。