URL 쿼리 문자열 매개 변수 가져오기
다음과 같은 형식의 URL 쿼리 문자열에서 매개 변수를 얻는 "필요한 코드 감소" 방법은 무엇입니까?
www.mysite.com/category/subcategory?myqueryhash
출력은 다음과 같습니다.myqueryhash
저는 이 접근방식을 알고 있습니다.
www.mysite.com/category/subcategory?q=myquery
<?php
echo $_GET['q']; //Output: myquery
?>
$_SERVER['QUERY_STRING']
에, 찾고 있는 데이터가 기재되어 있습니다.
문서
이를 위한 PHP 방법은 parse_url 함수를 사용하는 것입니다.이 함수는 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()
는 두 번째 파라미터(배열)에만 사용해야 합니다.사용.parse_str($_SERVER['QUERY_STRING'])
이 URL에서 변수를 만듭니다.$x
그리고.$y
이를 통해 코드는 다음과 같은 공격에 취약해집니다.http://www.example.com/page.php?authenticated=1
.
쿼리 문자열 전체를 원하는 경우:
$_SERVER["QUERY_STRING"]
최적의 답변은 다음과 같습니다.
<?php
echo 'Hello ' . htmlspecialchars($_GET["name"]) . '!';
?>
사용자가 http://example.com/?name=Hannes 라고 입력했다고 가정합니다.
위의 예는 다음과 같습니다.
Hannes님 안녕하세요!
프로그래밍 언어: PHP
// Inintialize a 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 the parse_str() function to parse the
// string passed via the URL
parse_str($url_components['query'], $params);
// Display result
echo 'v parameter value is ' . $params['v'];
이건 나한테 효과가 있었어.
또한 쿼리 문자열과 함께 현재 파일 이름을 찾는 경우 다음 작업만 수행하면 됩니다.
basename($_SERVER['REQUEST_URI'])
다음 예시와 같은 정보를 제공합니다.
file.filename?filename1=val&filename2=val
루트부터 시작하는 파일 전체 경로(예: /folder/folder2/file.filename?filename1=val&filename2=val)를 원하는 경우 basename() 함수를 삭제하고 채우기만 사용하십시오.
$_SERVER['REQUEST_URI']
이 코드와 표기법은 내 것이 아니다.Evan K는 커스텀 함수를 사용하여 다중값 동명 쿼리를 해결합니다.)는 다음에서 가져옵니다.
http://php.net/manual/en/function.parse-str.php#76792 학점은 에반 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');
?>
대신, PHP는 동일한 효과를 얻기 위해 필드 이름에 대괄호를 포함하는 비표준 준수 관행을 사용합니다.
<?php
# bizarre php-specific behavior
parse_str('foo[]=1&foo[]=2&foo[]=3');
# the above produces:
$foo = array('foo' => array('1', '2', '3') );
?>
이는 CGI 표준에 익숙한 사용자에게 혼란을 줄 수 있으므로 유의하십시오.대신 적절한 쿼리 문자열 파서 함수를 사용합니다.
<?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']);
?>
REFERERER 쿼리 문자열의 일부를 재구축하는 기능이 있습니다.
발신측 페이지의 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'));
@K 덕분입니다.샤자드.
이는 재작성 추가 없이 재작성된 쿼리 문자열을 원할 때 도움이 됩니다.예를 들어 /test/를 다시 쓴다고 칩시다.x=y에서 index.model로?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();
내의 각하려면 , URI 를 합니다.explode()
_SERVER[''']의 경우 REQUEST_URI를 합니다.''_URI''' 을 가져오려면 하여 $ 수 POST GET 파라미터 합니다).문자열이 전달되었는지 여부를 모르는 상태에서 문자열을 가져오려면 내가 정의한 함수를 사용하여 $_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;
}
쿼리 파라미터를 Integer 타입으로 변환하고 싶은 경우가 있기 때문에 이 함수에 세 번째 파라미터를 추가했습니다.
언급URL : https://stackoverflow.com/questions/8469767/get-url-query-string-parameters
'programing' 카테고리의 다른 글
Java 드라이버를 사용하여 mongoDB에 마지막으로 삽입된 문서의 ID 가져오기 (0) | 2022.10.14 |
---|---|
Epoch 시간을 날짜 시간으로 변환하는 중 (0) | 2022.10.05 |
새로고침으로 인해 빈 상태가 반환되는 이유는 무엇입니까? (0) | 2022.10.05 |
쿼리를 거의 완전히 구성할 수 있는 경우 SQL 주입 제한 (0) | 2022.10.05 |
Spring Integration을 사용하는 시기와낙타? (0) | 2022.10.05 |