Получить строку запроса URL
каков" менее необходимый код " для получения параметров из строки запроса URL, которая форматируется следующим образом?
www.mysite.com/category/subcategory?myqueryhash
вывод должен быть: myqueryhash
Я знаю об этом подходе:
www.mysite.com/category/subcategory?q=myquery
<?php
echo $_GET['q']; //Output: myquery
?>
10 ответов:
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);будет хранить 'x' = 100 и ' y ' = 200 в
$queries.посмотреть документация parse_str
EDIT
согласно документации PHP,
parse_str()должны использоваться только со вторым параметром. Используяparse_str($_SERVER['QUERY_STRING'])по этому URL создадим переменные$xи$y, что делает код уязвимым для атак, таких какhttp://www.example.com/page.php?authenticated=1.
Я буду рекомендовать лучший ответ как
<?php echo 'Hello ' . htmlspecialchars($_GET["name"]) . '!'; ?>предполагая, что пользователь ввел http://example.com/?name=Hannes
приведенный выше пример выведет:
Привет, Ханнес!
кроме того, если вы ищете текущее имя файла вместе со строкой запроса, вам будет просто необходимо следующие
basename($_SERVER['REQUEST_URI'])это даст вам информацию, как в следующем примере
.php?арг1=знач&арг2=Вальи если вы также хотите полный путь к файлу, а также начиная с корня, например /folder/folder2 / file.php?arg1=val&arg2=val затем просто удалите функцию basename () и просто используйте fillowing
$_SERVER['REQUEST_URI']
вот моя функция для восстановления деталей реферер строку запроса.
если вызывающая страница уже имела строку запроса в своем собственном URL, и вы должны вернуться на эту страницу и хотите отправить обратно некоторые, не все, что
$_GETvars (например, номер страницы).пример: строка запроса реферера был
?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']. Если вы хотите получить строки, не зная, передается ли он или нет. вы можете использовать функцию, которую я определил сам, чтобы получить параметры запроса из $_REQUEST (поскольку она работает как для POST, так и для GET params).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, поэтому я добавил третий параметр этой функции.
этот код и нотация не мои. Evan K решает многозначный запрос с тем же именем с помощью пользовательской функции ;) берется из :
http://php.net/manual/en/function.parse-str.php#76792 кредиты идут к Эвану К.
следует отметить, что встроенный parse_str не обрабатывает строку запроса стандартным способом 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']); ?>
спасибо @K. Shahzad Это помогает, когда вы хотите переписать строку запроса без каких-либо дополнений перезаписи. Допустим, вы переписываете /test/?x=y для индексирования.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();
Comments