Löschen von einzelnen Variablen aus URLs

Als ich mir heute einen eigenen Referer-Logger zusammengefummelt habe, suchte ich nach einer Möglichkeit, einzelne Variablen aus URLs löschen zu können. Google ist beispielsweise für Konstrukte wie http://www.google.nl/search?q=Joachim+Fest+Ich+nicht&hl=nl&start=50&sa=N bekannt. Das kann ich zwar schön speichern, aber wenn nun jemand mit dem Referer http://www.google.nl/search?q=Joachim+Fest+Ich+nicht&hl=nl&start=10 die Seite betritt, würde dies als neuer Eintrag gespeichert werden, obwohl mich gerade bei Google nicht juckt, über welche Unterseite mit welchem kryptischen Parameterwust ein Besucher meine Seite gefunden hat. Also habe ich da mal was gestrickt. Die Funktion deleteFromURL bekommt eine URL und ein Array zu löschender Variablen eingetrichtert und liefert die bereinigte URL. So wird aus obigem Beispiel, mit dem richtigen Array, die bereinigte URL http://www.google.nl/search?q=Joachim+Fest+Ich+nicht.

function deleteFromURL ( $url, $queriesToDelete ) {
	$parsedURL = parse_url ( $url );
	parse_str ( $parsedURL['query'], $parsedQuery );
	foreach ( $queriesToDelete as $single ) {
		if ( isset ( $parsedQuery[$single] ) ) {
			unset ( $parsedQuery[$single] );
		}
	}
	$url = $parsedURL['scheme'] . '://'
	 . $parsedURL['host']
	 . $parsedURL['path'] . '?'
	 . http_build_query ( $parsedQuery );
	return $url;
}

3 Gedanken zu „Löschen von einzelnen Variablen aus URLs“

  1. Grundsätzlich stimme ich dir zu, das hielte die Liste um einiges kürzer. Aber soherum geht mir nichts verloren. Ich könnte diesen Filter zum Bleistift rigoros auf alles anwenden und den Parameter PHPSESSID rausfiltern, also die Standard-PHP-Session-ID. Das könnte dann auf alle Anwendungen, die Links setzen, matchen, egal was sie sonst noch für Parameter transportieren.

  2. So, besonders für den Kollegen Google gips nu keepInURL:

    function keepInURL ( $url, $queriesToKeep ) {
    	$parsedURL = parse_url ( $url );
    	parse_str ( $parsedURL['query'], $parsedQuery );
    	$queriesForURL = array();
    	foreach ( $queriesToKeep as $single ) {
    		if ( isset ( $parsedQuery[$single] ) ) { 
    			$queriesForURL[$single] =
    				$parsedQuery[$single];
    		}
    	}
    	$url = $parsedURL['scheme'] . '://'
    		. $parsedURL['host']
    		. $parsedURL['path'] . '?'
    		. http_build_query ( $queriesForURL );
    	return $url;	
    }

Kommentare sind geschlossen.