URL 쿼리 문자열 가져 오기
PHPURL 쿼리 문자열 가져 오기
다음과 같이 형식화 된 URL 쿼리 문자열에서 매개 변수를 가져 오는 "적은 코드 필요"방법은 무엇입니까?
출력은 다음과 같아야합니다. myqueryhash
나는이 접근법을 알고있다 :
www.mysite.com/category/subcategory?q=myquery
<?php
echo $_GET['q']; //Output: myquery
?>
해결법
-
==============================
1.$ _SERVER [ 'QUERY_STRING']은 (는) 찾고있는 데이터를 포함하고 있습니다.
$ _SERVER [ 'QUERY_STRING']은 (는) 찾고있는 데이터를 포함하고 있습니다.
선적 서류 비치
-
==============================
2.PHP를 사용하는 방법은 parse_url 함수를 사용하는 것입니다. parse_url은 URL을 파싱하고 해당 구성 요소를 반환합니다. 쿼리 문자열 포함.
PHP를 사용하는 방법은 parse_url 함수를 사용하는 것입니다. parse_url은 URL을 파싱하고 해당 구성 요소를 반환합니다. 쿼리 문자열 포함.
예:
$url = 'www.mysite.com/category/subcategory?myqueryhash'; echo parse_url($url, PHP_URL_QUERY); # output "myqueryhash"
전체 문서는 여기에
-
==============================
3.parse_str () 함수는 모든 쿼리 매개 변수를 자동으로 배열로 읽습니다.
parse_str () 함수는 모든 쿼리 매개 변수를 자동으로 배열로 읽습니다.
예를 들어 URL이 http://www.example.com/page.php?x=100&y=200 인 경우 코드는
$queries = array(); parse_str($_SERVER['QUERY_STRING'], $queries);
$ 쿼리에 'x'= 100 및 'y'= 200을 저장합니다.
parse_str의 문서를 보라.
편집하다
PHP 문서에 따르면 parse_str ()은 두 번째 매개 변수와 함께 사용해야합니다. 이 URL에서 parse_str ($ _ SERVER [ 'QUERY_STRING'])을 사용하면 변수 $ x 및 $ y가 만들어 지므로 코드가 http://www.example.com/page.php?authenticated=1과 같은 공격에 취약 해집니다.
-
==============================
4.전체 쿼리 문자열을 원한다면 :
전체 쿼리 문자열을 원한다면 :
$_SERVER["QUERY_STRING"]
-
==============================
5.나는 최선의 대답을 다음과 같이 추천 할 것이다.
나는 최선의 대답을 다음과 같이 추천 할 것이다.
php echo 'Hello'. htmlspecialchars ($ _ GET [ "name"]). '!'; ?>
사용자가 http://example.com/?name=Hannes를 입력했다고 가정합니다.
위의 예는 다음과 같이 출력됩니다.
안녕하세요!
-
==============================
6.또한 쿼리 문자열과 함께 현재 파일 이름을 찾는 경우 다음을 수행하면됩니다.
또한 쿼리 문자열과 함께 현재 파일 이름을 찾는 경우 다음을 수행하면됩니다.
basename($_SERVER['REQUEST_URI'])
다음 예제와 같은 정보를 제공합니다.
또한 파일의 전체 경로를 루트에서 시작하려는 경우 (예 : /folder/folder2/file.php?arg1=val&arg2=val 다음 basename () 함수를 제거하고 fillowing 만 사용하십시오.
$_SERVER['REQUEST_URI']
-
==============================
7.REFERRER 쿼리 문자열의 일부를 다시 작성하는 기능은 다음과 같습니다.
REFERRER 쿼리 문자열의 일부를 다시 작성하는 기능은 다음과 같습니다.
호출 페이지에 이미 자체 URL에 검색어 문자열이 있고 해당 페이지로 돌아가서 그 모든 $ _GET 변수 (예 : 페이지 번호)의 일부가 아닌 일부를 다시 보내야합니다.
예 : Referrer의 쿼리 문자열은? 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'));
-
==============================
8.URI에서 각 노드를 얻으려면, $ _SERVER [ 'REQUEST_URI']에 함수 explode ()를 사용할 수 있습니다. 문자열이 전달되는지 여부를 모른 채 문자열을 얻고 싶다면. $ _REQUEST의 질의 매개 변수를 얻기 위해 내가 정의한 함수를 사용할 수있다 (POST와 GET 매개 변수 모두에 대해 작동하기 때문에).
URI에서 각 노드를 얻으려면, $ _SERVER [ 'REQUEST_URI']에 함수 explode ()를 사용할 수 있습니다. 문자열이 전달되는지 여부를 모른 채 문자열을 얻고 싶다면. $ _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; }
쿼리 매개 변수를 정수 유형으로 변환하려는 경우가있을 수 있으므로이 함수에 세 번째 매개 변수를 추가했습니다.
-
==============================
9.이 코드와 표기법은 제 것이 아닙니다. Evan K는 사용자 정의 함수를 사용하여 다중 값 동일한 이름 쿼리를 해결합니다. 에서 가져온 것입니다 :
이 코드와 표기법은 제 것이 아닙니다. Evan K는 사용자 정의 함수를 사용하여 다중 값 동일한 이름 쿼리를 해결합니다. 에서 가져온 것입니다 :
http://php.net/manual/en/function.parse-str.php#76792 크레딧은 Evan K로 이동합니다.
그것은 parse_str builtin이 중복 된 필드에 관해서는 CGI 표준 방식으로 쿼리 문자열을 처리하지 않는다는 것을 언급합니다. 같은 이름의 여러 필드가 쿼리 문자열에 존재하면 다른 모든 웹 처리 언어가 배열을 읽어들이지만 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']); ?>
-
==============================
10.@K에 감사드립니다. 샤 자드 이는 다시 쓰기 추가없이 다시 쓰기 쿼리 문자열을 원할 때 도움이됩니다. / test /? x = y를 index.php? q = test & x = y로 다시 작성하고 쿼리 문자열 만 원한다고 가정 해 보겠습니다.
@K에 감사드립니다. 샤 자드 이는 다시 쓰기 추가없이 다시 쓰기 쿼리 문자열을 원할 때 도움이됩니다. / 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();
from https://stackoverflow.com/questions/8469767/get-url-query-string by cc-by-sa and MIT license
'PHP' 카테고리의 다른 글
HTTP POST를 사용하여 HTML 및 PHP로 여러 파일을 선택하고 업로드하려면 어떻게합니까? (0) | 2018.09.13 |
---|---|
PHP는 연령 계산 (0) | 2018.09.13 |
$ _SERVER [ 'HTTPS']없이 HTTPS를 사용하는지 확인하는 방법 (1) | 2018.09.13 |
리눅스에서 PHP를 사용하여 Word 문서 만들기 [닫기] (0) | 2018.09.13 |
PHP에서 XMLReader를 사용하는 방법? (0) | 2018.09.13 |