rutas recibir parametros node metodo php url query-string

php - recibir - Obtener parámetros de cadena de consulta de URL



recibir parametros en express (10)

Además, si está buscando el nombre del archivo actual junto con la cadena de consulta, solo necesitará seguir

basename($_SERVER[''REQUEST_URI''])

Le proporcionaría información como ejemplo siguiente

file.php? arg1 = val & arg2 = val

Y si también desea que la ruta completa del archivo se inicie desde la raíz, por ejemplo, /folder/folder2/file.php?arg1=val&arg2=val, simplemente elimine la función basename () y simplemente use fillowing

$_SERVER[''REQUEST_URI'']

¿Cuál es la forma de "menos código necesario" para obtener parámetros de una cadena de consulta de URL con el formato siguiente?

www.mysite.com/category/subcategory?myqueryhash

La salida debe ser: myqueryhash

Soy consciente de este enfoque:

www.mysite.com/category/subcategory?q=myquery <?php echo $_GET[''q'']; //Output: myquery ?>


Aquí está mi función para reconstruir partes de la cadena de consulta del REFERENTE .

Si la página de llamada ya tenía una cadena de consulta en su propia URL , y debe volver a esa página y desea enviar algunas, no todas, de $_GET vars $_GET (por ejemplo, un número de página).

Ejemplo: la cadena de consulta del remitente era ?foo=1&bar=2&baz=3 llamante refererQueryString( ''foo'' , ''baz'' ) devuelve 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''));


Este código y notación no es mío. Evan K resuelve una consulta del mismo nombre de varios valores con una función personalizada;) se toma de:

http://php.net/manual/en/function.parse-str.php#76792 Créditos para Evan K.

Cabe mencionar que la función incorporada parse_str NO procesa una cadena de consulta de la manera estándar CGI, cuando se trata de campos duplicados. Si existen varios campos con el mismo nombre en una cadena de consulta, todos los demás lenguajes de procesamiento web los leerían en una matriz, pero PHP los sobrescribe silenciosamente:

<?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'']); ?>


Gracias a @K. Shahzad Esto ayuda cuando desea que la cadena de consulta reescrita sin ninguna adición de reescritura. Digamos que reescribes / test /? X = y en index.php? Q = test & x = y y solo quieres la cadena de consulta.

function get_query_string(){ $arr = explode("?",$_SERVER[''REQUEST_URI'']); if (count($arr) == 2){ return ""; }else{ return "?".end($arr)."<br>"; } } $query_string = get_query_string();


La forma PHP de hacerlo es usar la función parse_url , que analiza una URL y devuelve sus componentes. Incluyendo la cadena de consulta.

Ejemplo:

$url = ''www.mysite.com/category/subcategory?myqueryhash''; echo parse_url($url, PHP_URL_QUERY); # output "myqueryhash"

Documentación completa aquí


La función parse_str() lee automáticamente todos los parámetros de consulta en una matriz.

Por ejemplo, si la URL es http://www.example.com/page.php?x=100&y=200 , el código

$queries = array(); parse_str($_SERVER[''QUERY_STRING''], $queries);

almacenará ''x'' = 100 y ''y'' = 200 en $queries .

Mira la documentación de parse_str

EDITAR

Según la documentación de PHP, parse_str() solo debe usarse con un segundo parámetro. El uso de parse_str($_SERVER[''QUERY_STRING'']) en esta URL creará las variables $x y $y , lo que hace que el código sea vulnerable a ataques como http://www.example.com/page.php?authenticated=1 .


Para obtener cada nodo en el URI, puede usar la función explode() para $ _SERVER [''REQUEST_URI'']. Si desea obtener cadenas sin saber si se pasa o no. puede usar la función que me definí para obtener los parámetros de consulta de $ _REQUEST (ya que funciona para los parámetros POST y 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; }

Puede haber algunos casos en los que deseamos que los parámetros de consulta se conviertan en tipo Integer, así que agregué el tercer parámetro a esta función.


Recomendaré mejor respuesta como

<?php echo ''Hello '' . htmlspecialchars($_GET["name"]) . ''!''; ?>

Asumiendo que el usuario ingresó http://example.com/?name=Hannes

El ejemplo anterior dará como resultado:

Hola Hannes!


Si quieres toda la cadena de consulta:

$_SERVER["QUERY_STRING"]