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…

Renovierungsarbeiten im Blog

Wordpress und Plugins upgedated, Bug in einem Plugin gefunden und gefixt.

In den letzten Monaten habe ich das Blog und vor allem die Technik dahinter ziemlich vernachlässigt. Die letzten zwei WordPress Updates habe ich an mir vorbeiziehen lassen und auch die Plugins waren nicht mehr auf dem neuesten Stand. Da sich für Morgen der Release von WordPress 2.6 andeutet, habe ich in der letzten Woche peu à peu die diversen Blogs auf 2.5.1 nachgezogen und auch die Plugins auf den neuesten Stand gebracht.
Während Steffi sich ein neues Theme ausgesucht hat, habe ich mich darauf beschränkt bei den Plugins auszumisten und Funktionalitäten zu testen. Falls euch wider erwarten doch noch Fehler über den Weg laufen sollten, seid doch bitte so nett und schreibt mir kurz, wo es hängt.

Bezüglich des Plugins mit Bug werde ich gleich noch etwas schreiben. habe ich hier etwas geschrieben.

Sicherheitslücke in WordPress 2.1 bis inklusive 2.3 (Massiv!!!)

Wie ich gerade auf Blogsecurity.net lese, gibt es einen massiven Bug in WordPress. Für das Management der Blogroll ist die links.php zuständig. Diese überprüft nicht, ob der eintragende dazu überhaupt berechtigt ist. Solange dieser Bug nix gefixt ist, kann sich also jeder in die Blogroll eines fremden Blogs eintragen. Dies wird auch schon als neue Spamstrategie beobachtet.

Der Fix besteht einfach darin, abzufragen, ob der Eintragende dazu eine Berechtigung hat:
if ( ! current_user_can('manage_links') ) wp_die( __('You do not have sufficient permissions to edit the links for this blog.') );

Man kann sich auch einfach eine gefixte link.php herunterladen. Diese kopiert man dann ins Verzeichnis „wp-admin“ und überschreibt die dortige link.php , schon ist das Blog wieder sicher.

1000 Kommentare – Kommentarstatistik

Vor mittlerweile auch schon wieder mehr als drei Wochen, hatte ich in einem Kommentar erwähnt, dass das WordPress Dashboard mir verkündete, dass 1000 Kommentare hier im Blog geschrieben worden seine. So ganz konnte ich das nicht glauben und baute daraufhin auf der Archiv-Seite eine Kommentarstatistik ein, nur kam ich einfach nicht dazu, darauf hinzuweisen.

Momentan werden 880 Kommentare, 207 Pingbacks und 21 Trackbacks angezeigt, das ganze auf 493 Artikel verteilt. An dieser Stelle schon mal Danke an all die Kommentierenden, im Schnitt bedeutet das 110 Kommentare pro Monat und somit dürfte Mitte November der wirklich 1000ste Kommentar geschrieben werden.

WordPress Plugin: WP-Print 2.20 deutsche Sprachdatei

WP-Print habe ich im Juni schon mal vorgestellt. Kurz gesagt ist es ein Plugin, dass eine druckbare Ansicht eines Blogartikels generiert.

WP-Print ist gerade in der Version 2.20 erschienen. Neu ist, dass man die Ansicht der Druckansicht per CSS formatieren und automatisch eine Copyright-Notiz mitdrucken lassen kann. Desweiteren kann man das Plugin nun deinstallieren, was bedeutet dass die Datenbankeinträge des Plugins gelöscht werden. Eine Innovation, die ich noch bei keinem anderen Plugin gesehen habe, üblicherweise wird nämlich die Datenbank nach und nach von den Plugins vollgemüllt, weil keines seine Hinterlassenschaften aufräumt.

Wie bereits für die Version 2.11 habe ich auch diesmal wieder eine Übersetzung angefertigt: WP-Print 2.20 Sprachdateien deutsch

Installation von WP-Print 2.20 deutsch

  1. WP-Print 2.20 herunterladen und entpacken.
  2. WP-Print 2.20 Sprachdateien herunterladen und die Dateien in das „print“ Verzeichnis von WP-Print (in dem auch die ganzen .php Dateien liegen) entpacken.
  3. Das „Print“-Verzeichnis mitsamt Unterverzeichnis auf den Webserver ins Plugins Verzeichnis der WordPress Installation kopieren.
  4. Unter „Plugins“ das Plugin WP-Print aktivieren.
  5. Unter „Einstellungen|Permalinks“ die „Permalink-Struktur aktualisieren“.
  6. Unter „Einstellungen|Drucken“ die gewünschten Optionen einstellen.

Renovierungsarbeiten – Ursachen

Wie gestern angekündigt hab ich einiges an der Datenbank und der Dateistruktur des Blogs geändert und will euch nun erklären warum. Ich versuch mich wirklich kurz zu halten 😉

  • UTF8-Umstellung: Seit WordPress 2.2 wird jedes neue WordPress-Blog standardmäßig mit dem Zeichensatz UTF8 installiert. Blogs, die vorher installiert wurden, wurden nicht automatisch auf UTF8 umgestellt. Dies kann eventuell dazu führen, dass ein Plugin in einem UTF8 Blog funktioniert und in einem älteren nicht. Zur Umwandlung habe ich dieses Plugin genutzt und so ist nun auch „Marnems Sicht der Dinge“ ein UTF8-Blog.
  • Umbiegen des MyGallery-Ordners: Dient zur Verringerung der zu Sichernden Dateien vor einem Update.
  • Umbenennen aller Tabellennamen: WordPress schreibt alle Daten die gespeichert werden sollen in sogenannte Tabellen. Ich habe nun diese Tabellen umbenannt, um ein kleines Experiment zu wagen und mehre Blogs auf nur einer WordPress-Installation laufen zu lassen. Dies soll die Arbeit des Einspielens der häufigen Updates von WordPress oder Plugins verringern.

Renovierungsarbeiten

Da ist mein Blog keine acht Monate alt und schon sind Renovierungsarbeiten fällig. Ich werde einige größere Basteleien an der Datenbank vornehmen müssen, weshalb ich zu einer so untypisch frühen Uhrzeit mit den Arbeiten anfange.

Kleiner Überblick:

  • Umstellen der des Datenbankzeichensatzes von „latin 1“ auf „utf-8“. Wenns geklappt hat, sag ich euch warum dass auch auf einige von euch zukommen könnte…
  • Verschieben des MyGallery-Dateiordners und entsprechendes Umbiegen der Dateiverweise.
  • Umbenennen aller Tabellennamen

Wie man sieht, da ist viel Potential für eine Komplettzerstörung des Blogs. Wünscht mir Glück und drückt mir die Daumen. Ich werd so gegen 22:30 das Blog abschalten und mit den Arbeiten beginnen und hoffe bis 24:00 Uhr fertig zu sein. Wenn das Blog um 1 Uhr noch nicht wieder oben ist, muss ich wohl oder Übel den alten Zustand wieder einspielen…
Dafür gibts morgen einen netten Bericht mit einem exklusiv-Interview 😀

[Update]
Hat alles geklappt. Zwar zeigt „Recent Comments“ die Umlaute noch als „?“, aber das ist ein Minimalproblem.
Wer einen Fehler entdeckt, sagt mir bitte Bescheid, ja?

[Update 2]
Danke an den Seoblogger Andreas Roth und an Boje für den Hinweis, dass keine Beiträge oder Seiten aufrufbar waren.
Schlecht getestet, Marnem! Zum Glück wars mit einem „Permalinkstruktur aktualisieren“ behoben.

[Update 3]
Und schon wieder. Diesmal Danke an Samthammel (der heute Morgen auch schon geschrieben hatte). Ich hab grad keinen Plan, wie ichs zerschossen hab :-(