Search-Hilite und Googlesuche aus dem Firefox heraus


Das Plugin Search-Hilite hab ich nun schon seit über einem Jahr im Blog integriert, doch erst heute habe ich wieder einmal einen fetten Bug darin entdeckt.

Search-Hilite sorgt dafür, dass Suchbegriffe auf einer Seite farblich hervorgehoben werden. Hintergrund ist, dass man so deutlich schneller sondieren kann, ob die Seite wirklich das gesuchte Themengebiet abdeckt.

Vor einem Jahr stellte ich fest, dass Search-Hilite ein Problem mit Umlauten hat. Ich konnte dieses Problem lösen, indem ich den Quelltext des Plugins veränderte. Dies habe ich dem Pluginautor auch mitgeteilt, doch leider wird das Plugin anscheinend nicht weiterentwickelt.

Der neue Bug ist etwas anders gelagert. Kommt man über Google auf das Blog wurden manchmal nicht die Suchbegriffe, sondern jedes Vorkommen des Buchstaben „t“ markiert. Bis heute konnte ich nicht nachvollziehen woher dieser Bug kommt. Bei den heutigen Tests im Rahmen der Renovierungsarbeiten fiel mir dann auf, dass es einen Unterschied macht, ob ich den Suchbegriff bei Google direkt oder im Firefox Suchfenster eingebe:
Der Referer ist unterschiedlich

Suche ich zB nach Bosbach "Wegwerf-Terrorist sehen die Referer wie folgt aus:

  1. http://www.google.de/search?hl=de<strong>&q</strong>=bosbach+%22wegwerf-terrorist%22&btnG=Suche&meta= bei Eingabe direkt bei Google
  2. http://www.google.com/search<strong>?q</strong>=bosbach+%22wegwerf-terrorist%22&ie=utf-8&oe=utf-8<strong>&aq=t</strong>&rls=org.mozilla:de:official&client=firefox-a bei Eingabe im Firefox Suchfenster

Das Problem ist nun, wie die Suchwörter in den URLs codiert sind. Bei
1. „/search?hl=de&q=bosbach+%22wegwerf-terrorist%22&“ und bei
2. „/search?q=bosbach+%22wegwerf-terrorist%22&“

Bei 1. also „&q“ und „?q“ bei 2.
Search-Hilte filtert mit dem Regulären Ausdruck /^.*q=([^&]+)&?.*$/i und stolpert leider über das &aq=t, denn das „t“ überschreibt die eigentlichen Suchbegriffe.

Um das Problem zu lösen habe ich ein wenig mit dem Regulären Ausdruck rumgespielt, aber bin damit nicht zu Rande gekommen. Stattdessen habe ich mich umgesehen, wie andere das Problem lösen und bin auf das Plugin Landingsites(de) von Frank Bültge gestoßen, das ja auch bei mir im Einsatz ist. Dort wird, statt zu Versuchen das Problem auf einen Streich zu lösen, das Problem (wie auch der String) in kleine, handhabbare Stücke zerlegt.

function ls_get_terms($d) {
	$terms       = null;
	$query_array = array();
	$query_terms = null;

	// Get raw query
	$query = explode('&'.$d.'=', $_SERVER['HTTP_REFERER']);
	if($query[1] == '') {
		$query = explode('?'.$d.'=', $_SERVER['HTTP_REFERER']);
	}
	$query = explode('&', $query[1]);
	$query = urldecode($query[0]);

	// Remove quotes, split into words, and format for HTML display
	$query = str_replace("'", '', $query);
	$query = str_replace('"', '', $query);
	$query_array = preg_split('/[\s,\+\.]+/',$query);
	$query_terms = implode(' ', $query_array);
	$terms = urldecode($query_terms);

	return $terms;
}

Fügt man nun diese Funktion Search-Hilite hinzu, muss man nur noch die bestehende Regexerei auskommentieren und bekommt zuverlässig markierte Suchbegriffe:

// Google query parsing code adapted from Dean Allen's
// Google Hilite 0.3. http://textism.com
// $query_terms = preg_replace('/^.*(&|\?)q=([^&]+)&?.*$/i','$1', $referer);
// $query_terms = preg_replace('/\'|"/', '', $query_terms);
$query_terms = ls_get_terms("q");
$query_array = preg_split ("/[\s,\+\.]+/", $query_terms);

Falls ihr Landingsites(de) bereits einsetzt, solltet ihr die Funktion leicht umbenennen (zB ls_get_terms_hilite). Alternativ kann man auch darauf verzichten die Funktion zu kopieren und ruft sie direkt aus Landingsites(de) auf, allerdings wirken sich dann natürlich Veränderungen an Landingsites(de) auch auf Search-Hilite aus.

Ach ja, natürlich könnte ich das modifizierte Search-Hilite auch direkt hier zum Download bereit stellen, möchte dies aber erstmal nicht tun, bevor ich Frank Bültge um Erlaubnis gebeten habe, seinen Code verwenden zu dürfen. Da Frank momentan in Urlaub ist, kann dies aber noch 3 Wochen dauern…

Stichworte zu diesem Artikel:

3 Kommentare ↓

#1 Renovierungsarbeiten im Blog — Marnems Sicht der Dinge am 13.07.08 um 23:18

[…] Search-Hilite und Googlesuche aus dem Firefox heraus → […]

#2 Frank am 28.07.08 um 09:00

Aber sicher, alles per GPL und CC nutzbar und bedarf an sich keiner Nachfrage, sorgt aber für Rückmeldung und Anerkennung.
LG Frank

#3 Marnem am 30.07.08 um 00:08

Vielen Dank :-)

Dann werde ich in den nächsten Tagen das modifizierte Search-Hilite veröffentlichen.

Hinterlassen Sie einen Kommentar


Kommentieren sie zum ersten Mal in diesem Blog? Dann wird Ihr Kommentar erst angezeigt, nachdem Marnem ihn freigeschalten hat. Bitte haben Sie dafür Verständnis.
Welche Daten über Sie gespeichert wurden, können Sie in der Datenschutzerklärung nachlesen.