webentwicklung-frage-antwort-db.com.de

Mehrere HTTP-GET-Parameter mit demselben Bezeichner

Nehmen wir an, ich bekomme Anfragen wie:

http://www.example.com/index.php?id=123&version=3&id=234&version=4

Ist es möglich, diese auf einfache Weise in meinen PHP-Code zu extrahieren? Ich erkenne, dass ich den gesamten Querystring mit Javascript mithilfe von window.location.href erhalten und manuell bearbeiten konnte, aber ich suche etwas eleganteres. Die Anforderungen können eine beliebige Anzahl von Version/ID-Paaren enthalten. Ich kann jedoch davon ausgehen, dass die Abfrage wohlgeformt ist und keine Verpflichtung besteht, ungültige Zeichenfolgen zu verarbeiten.

11
MatsT

Laut diesem Kommentar aus dem PHP-Handbuch , wird der Abfrage-String-Parser von PHP doppelte Params löschen ... Ich glaube nicht, dass PHP für was geeignet ist Sie möchten tun (außer, dass es dieselbe Kapazität wie Javascript hat, um die unformatierte Abfragezeichenfolge zu erhalten, mit der Sie machen können, was Sie möchten).

7
Brian Driscoll

Wenn Sie den Feldnamen so ändern können, dass er [] enthält, erstellt PHP ein Array mit allen übereinstimmenden Werten:

http://www.example.com/index.php?id[]=123&version[]=3&id[]=234&version[]=4

Wenn Sie nicht in der Lage sind, die Feldnamen zu ändern, müssen Sie, wie Sie sagen, den Querstring selbst parsen.

24
Jacob Mattison

Vorausgesetzt, Sie haben eine gewisse Kontrolle über die Anfrage, wird der Name mit [] und PHP angehängt, und es werden Arrays generiert, anstatt alle außer einem zu löschen.

http://www.example.com/index.php?id[]=123&version[]=3&id[]=234&version[]=4

Da es sich um Paare handelt, möchten Sie wahrscheinlich die Reihenfolge festlegen, in der sie mit Indizes angezeigt werden.

http://www.example.com/index.php?id[0]=123&version[0]=3&id[1]=234&version[1]=4
1
Quentin

Extrahieren Sie einfach die Schlüssel und Werte von $ _GET und verwenden Sie die Funktion als:

print_array('$_GET...',$_GET);

... und der Funktionscode lautet:

function print_array($title, $arr) {
    echo '<table width="100%" style="padding:10;">';
    echo '<tr><td width="30%" style="text-align:right; background-color:bisque;">key of </td><td style="background-color:bisque;">'.$title.'</td></tr>';
    foreach($arr as $key => $value) {
        echo '<tr>';
            echo '<td style="text-align:right; color:grey;">';
                echo $key;
            echo '</td>';
            echo '<td>';
                echo $value;
            echo '</td>';
        echo '</tr>';
    }
    echo '</table>';
}
1
Vitor Marques

Nicht so abgerundet oder zuverlässig wie die oben genannten Methoden, aber ich verwende hiermit die Notwendigkeit, [] in URLs zu verwenden, ohne sich um das Schreiben zu kümmern.

$aQuery = explode("&", $_SERVER['QUERY_STRING']);
$aQueryOutput = array();
foreach ($aQuery as $param) {
    if(!empty($param)){
        $aTemp = explode('=', $param, 2);
        if(isset($aTemp[1]) && $aTemp[1] !== ""){
            list($name, $value) = explode('=', $param, 2);
            $aQueryOutput[ strtolower(urldecode($name)) ][] = urldecode(preg_replace('/[^a-z 0-9\'+-]/i', "", $value));
        }
    }
}
0
atoms