获取URL查询string
从下面格式化的URL查询string中获取参数的“less需要代码”方法是什么?
www.mysite.com/category/subcategory?myqueryhash
输出应该是: myqueryhash
我知道这个方法:
www.mysite.com/category/subcategory?q=myquery <?php echo $_GET['q']; //Output: myquery ?>
$_SERVER['QUERY_STRING']
包含您正在查找的数据。
文档
- php.net:$ _SERVER – 手册
函数parse_str自动将所有查询参数转换为相应的PHPvariables。 例如从以下url:
http://www.domain.com/page.php?x=100&y=200
这个代码:
parse_str($_SERVER['QUERY_STRING']);
会自动创build值为100和200的variables$ x和$ y,然后您可以在代码中使用它们。
PHP的方法是使用parse_url函数,parsing一个URL并返回它的组件。 包括查询string。
例:
$url = 'www.mysite.com/category/subcategory?myqueryhash'; echo parse_url($url, PHP_URL_QUERY); # output "myqueryhash"
这里有完整的文档
如果你想要整个查询string:
$_SERVER["QUERY_STRING"]
我会build议最好的答案
<?php echo 'Hello ' . htmlspecialchars($_GET["name"]) . '!'; ?>
假设用户inputhttp://example.com/?name=Hannes
上面的例子会输出:
哈内斯你好!
另外,如果您正在查找当前文件名以及查询string,则只需要遵循以下步骤
basename($_SERVER['REQUEST_URI'])
它会为您提供如下例子的信息
file.php?ARG1 = VAL&ARG2 = VAL
如果你还想要从根开始的文件的完整path,例如/folder/folder2/file.php?arg1=val&arg2=val,那么只需删除basename()函数,只使用fillowing
$_SERVER['REQUEST_URI']
这里是我的函数重buildREFERRER的查询string的部分。
如果调用页面在其自己的URL中已经有一个查询string,并且您必须返回该页面并且想要发回$_GET
variables(例如页码)的一部分(而不是全部)。
示例:引用的查询string是?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'));
为了获得URI中的每个节点,可以使用函数explode()
到$ _SERVER ['REQUEST_URI']。 如果你想得到string而不知道它是否通过。 您可以使用我自己定义的函数从$ _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; }
当我们想把查询参数转换成Integertypes时,可能会有一些情况,所以我在这个函数中加了第三个参数。
这个代码和符号不是我的。 Evan K用自定义函数解决了一个多值同名查询;)取自:
http://php.net/manual/en/function.parse-str.php#76792 积分去Evan K.
值得一提的是,parse_str内build不处理CGI标准方式的查询string,当涉及到重复字段时。 如果查询string中存在多个相同名称的字段,则每个其他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当你希望重写的查询string不需要重写时,这会有所帮助。 假设您将/ test /?x = y重写为index.php?q = test&x = y,并且只想要查询string。
function get_query_string(){ $arr = explode("?",$_SERVER['REQUEST_URI']); if (count($arr) == 2){ return ""; }else{ return "?".end($arr)."<br>"; } } $query_string = get_query_string();