PHPのURLからフラグメント(ハッシュ「#」の後の値)を取得するにはどうすればよいですか?
http://domain.com/site/gallery/1#photo45
から言うphoto45
が欲しい
ユーザーのブラウザに表示されるハッシュマークまたはアンカーの後に値を取得する場合:この値はサーバーに送信されないため、「標準」HTTPでは不可能です(したがって、$_SERVER["REQUEST_URI"]
または同様の定義済み変数)。クライアント側で何らかのJavaScriptマジックが必要になります。この値をPOSTパラメーターとして含めるには。
ただし、既知のURLを任意のソースから解析するだけの場合は、 answer by mck89 で十分です。
その部分は「フラグメント」と呼ばれ、次の方法で取得できます。
$url=parse_url("http://domain.com/site/gallery/1#photo45 ");
echo $url["fragment"]; //This variable contains the 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.ハッシュ全体#
[hash]記号を含む(そのように動作するJavaScriptでwindow.location.hash
を使用したため:))
...(通常のHTTPリクエストを検討している間)...
...これが助けたことを願って:)
私はこのための回避策を少し探していました-私が見つけた唯一のことは、「アンカー」を読むためにURL書き換えを使用することです。私はここのApacheドキュメントで見つけました http://httpd.Apache.org/docs/2.2/rewrite/advanced.html 次の...
Mod_rewriteは#文字をエスケープして%23に変換するため、デフォルトではHTMLアンカーへのリダイレクトは機能しません。これにより、リダイレクトが中断されます。
解決策:RewriteRuleで[NE]フラグを使用します。 NEはエスケープなしを意味します。
説明:この手法はもちろん、デフォルトでmod_rewriteがURLエンコードする他の特殊文字でも機能します。
他の警告がありますが、そうではないかもしれません...しかし、少なくともサーバー上の#で何かをすることは可能だと思います。
ハッシュ記号の後にテキストを取得することはできません。要求ではサーバーに送信されません。
最初に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'
Uがphpで値を要求している場合、私はこのトリックを見つけました。
http://www.stoimen.com/blog/2009/04/15/read-the-anchor-part-of-the-url-with-php/
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;
?>
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']を介して値を取得できます(フォームを設定します)
クライアント側でサーバー側の文字列置換を行うことができます。特に堅牢なソリューションではありませんが、私のような迅速なソリューションが必要ない場合は、それで十分だと思います。
クライアント:
var tempString = stringVal.replace('#', 'hashtag');
サーバ:
$user_message = $_GET['userMessage'];
$user_message = str_replace("hashtag", "#", $user_message);