回答:
$_SERVER['QUERY_STRING']
表示さfoo=bar2
れますfoo=bar1&foo=bar2
print_r()
ステートメントを<pre>
タグでラップしますecho '<pre>'.print_r($_SERVER, TRUE).'</pre>';
。
$_SERVER['REQUEST_URI']
、mod_rewriteを使用してURLのその部分を変数として渡すことを検討することもできます。参照してくださいstackoverflow.com/questions/16388959/url-rewriting-with-php
これを行うPHPの方法は、URLを解析してそのコンポーネントを返す関数parse_urlを使用することです。クエリ文字列を含みます。
例:
$url = 'www.mysite.com/category/subcategory?myqueryhash';
echo parse_url($url, PHP_URL_QUERY); # output "myqueryhash"
関数はparse_str()
自動的にすべてのクエリパラメータを配列に読み込みます。
たとえば、URLがのhttp://www.example.com/page.php?x=100&y=200
場合、コードは
$queries = array();
parse_str($_SERVER['QUERY_STRING'], $queries);
パラメータを$queries
配列($queries['x']=100
、$queries['y']=200
)に格納します。
parse_strのドキュメントを見てください
編集
PHPのドキュメントによるparse_str()
と、2番目のパラメーターでのみ使用する必要があります。使用するparse_str($_SERVER['QUERY_STRING'])
変数を作成します。このURLに$x
と$y
のような攻撃に対して脆弱コードを作成され、http://www.example.com/page.php?authenticated=1
。
parse_str
が、当然、これはノーノーと見なされます。
parse_str($_SERVER['QUERY_STRING'], $params);
これで、$params
配列にはすべてのクエリ文字列値が含まれます。
クエリ文字列全体が必要な場合:
$_SERVER["QUERY_STRING"]
私はベストアンサーをお勧めします
<?php
echo 'Hello ' . htmlspecialchars($_GET["name"]) . '!';
?>
ユーザーがhttp://example.com/?name=Hannesと入力したと仮定します
上記の例は出力します:
ハネスこんにちは!
example.com/?Hannes
...
また、クエリ文字列とともに現在のファイル名を探している場合は、次のようにする必要があります
basename($_SERVER['REQUEST_URI'])
次の例のような情報を提供します
file.php?arg1 = val&arg2 = val
また、ルートから開始するファイルの完全パスも必要な場合は、たとえば/folder/folder2/file.php?arg1=val&arg2=val次に、basename()関数を削除し、fillowingを使用します。
$_SERVER['REQUEST_URI']
これが、REFERRERのクエリ文字列の一部を再構築するための関数です。
呼び出しページの独自のURLにクエリ文字列が既にあり、そのページに戻って、$_GET
変数のすべてではなく一部(ページ番号など)を送り返す必要がある場合。
例:リファラーのクエリ文字列がreturnを?foo=1&bar=2&baz=3
呼び出しrefererQueryString( 'foo' , 'baz' )
ていましたfoo=1&baz=3"
:
function refererQueryString(/* var args */) {
//Return empty string if no referer or no $_GET vars in referer available:
if (!isset($_SERVER['HTTP_REFERER']) ||
empty( $_SERVER['HTTP_REFERER']) ||
empty(parse_url($_SERVER['HTTP_REFERER'], PHP_URL_QUERY ))) {
return '';
}
//Get URL query of referer (something like "threadID=7&page=8")
$refererQueryString = parse_url(urldecode($_SERVER['HTTP_REFERER']), PHP_URL_QUERY);
//Which values do you want to extract? (You passed their names as variables.)
$args = func_get_args();
//Get '[key=name]' strings out of referer's URL:
$pairs = explode('&',$refererQueryString);
//String you will return later:
$return = '';
//Analyze retrieved strings and look for the ones of interest:
foreach ($pairs as $pair) {
$keyVal = explode('=',$pair);
$key = &$keyVal[0];
$val = urlencode($keyVal[1]);
//If you passed the name as arg, attach current pair to return string:
if(in_array($key,$args)) {
$return .= '&'. $key . '=' .$val;
}
}
//Here are your returned 'key=value' pairs glued together with "&":
return ltrim($return,'&');
}
//If your referer was 'page.php?foo=1&bar=2&baz=3'
//and you want to header() back to 'page.php?foo=1&baz=3'
//(no 'bar', only foo and baz), then apply:
header('Location: page.php?'.refererQueryString('foo','baz'));
このコードと表記は私のものではありません。Evan Kは、カスタム関数を使用して複数値の同じ名前のクエリを解決します。
http://php.net/manual/en/function.parse-str.php#76792 クレジットはEvan Kに送られます。
重複フィールドに関しては、parse_strビルトインがCGI標準の方法でクエリ文字列を処理しないことに言及します。クエリ文字列に同じ名前の複数のフィールドが存在する場合、他のすべてのWeb処理言語はそれらを配列に読み取りますが、PHPは暗黙的にそれらを上書きします。
<?php
# silently fails to handle multiple values
parse_str('foo=1&foo=2&foo=3');
# the above produces:
$foo = array('foo' => '3');
?>
Instead, PHP uses a non-standards compliant practice of including brackets in fieldnames to achieve the same effect.
<?php
# bizarre php-specific behavior
parse_str('foo[]=1&foo[]=2&foo[]=3');
# the above produces:
$foo = array('foo' => array('1', '2', '3') );
?>
This can be confusing for anyone who's used to the CGI standard, so keep it in mind. As an alternative, I use a "proper" querystring parser function:
<?php
function proper_parse_str($str) {
# result array
$arr = array();
# split on outer delimiter
$pairs = explode('&', $str);
# loop through each pair
foreach ($pairs as $i) {
# split into name and value
list($name,$value) = explode('=', $i, 2);
# if name already exists
if( isset($arr[$name]) ) {
# stick multiple values into an array
if( is_array($arr[$name]) ) {
$arr[$name][] = $value;
}
else {
$arr[$name] = array($arr[$name], $value);
}
}
# otherwise, simply stick it in a scalar
else {
$arr[$name] = $value;
}
}
# return result array
return $arr;
}
$query = proper_parse_str($_SERVER['QUERY_STRING']);
?>
@Kに感謝します。Shahzadこれは、書き換えを追加せずに書き換えられたクエリ文字列が必要な場合に役立ちます。/ test /?x = yをindex.php?q = test&x = yに書き換えて、クエリ文字列だけが欲しいとしましょう。
function get_query_string(){
$arr = explode("?",$_SERVER['REQUEST_URI']);
if (count($arr) == 2){
return "";
}else{
return "?".end($arr)."<br>";
}
}
$query_string = get_query_string();
プログラミング言語:PHP
// Inintialize URL to the variable
$url = 'https://www.youtube.com/watch?v=qnMxsGeDz90';
// Use parse_url() function to parse the URL
// and return an associative array which
// contains its various components
$url_components = parse_url($url);
// Use parse_str() function to parse the
// string passed via URL
parse_str($url_components['query'], $params);
// Display result
echo 'v parameter value is '.$params['v'];
これでうまくいきました。私も願っています、それもあなたを助けるでしょう:)
URIの各ノードを取得するには、explode()
$ _ SERVER ['REQUEST_URI']への関数を使用できます。渡されたかどうかわからない文字列を取得したい場合。私が自分で定義した関数を使用して、$ _ REQUESTからクエリパラメータを取得できます(POSTパラメータとGETパラメータの両方で機能するため)。
function getv($key, $default = '', $data_type = '')
{
$param = (isset($_REQUEST[$key]) ? $_REQUEST[$key] : $default);
if (!is_array($param) && $data_type == 'int') {
$param = intval($param);
}
return $param;
}
クエリパラメータを整数型に変換したい場合があるので、この関数に3番目のパラメータを追加しました。