Einige werden sicher verfolgt haben, dass sich das WordPress-Team vergrößert hat. Nun ergreife ich mal die Gelegenheit und möchte auch mit einem Artikel hier meinen Einstand geben. Da ich mich vorwiegend mit dem WordPress-Code und seinen Zusätzen beschäftige, hab ich auch ein aktuelles Thema aus dem Forum dazu aufgegriffen.

Wer in der glücklichen Lage ist, die Rechtschreibprüfung bei seinem Provider einsetzen zu können, wird festgestellt haben, dass diese sich mit deutschen Umlauten nicht wirklich gut auszukennen scheint. Um das mal an einem kleinen Beispiel zu demonstrieren, so in etwa sieht der Zeichensalat dann aus:

Was bitte meint hier Google gefunden zu haben?

Na bitte, also WordPress wieder, oder doch nicht?

Zu früh gefreut, diesmal kann WordPress genauso wenig dafür wie Google, denn beide arbeiten mit den Daten, die sie bekommen, korrekt. Aber wer ist dann verantwortlich ?

Nach ein wenig Suche, mehreren zusätzlichen Logfile-Ausgaben und ein wenig Unterstützung durch einen geeigneten Browser mit Extensions war die Fehlerstelle schnell dingfest gemacht. Und wer hätte es gedacht, es ist ein Plugin des TinyMCE – der Google Spell Checker.

Des Pudels Kern ist ein doppeltes utf8_encode, denn der vorliegende Text ist bereits utf8 codiert. Weil dieser Fehler kein direktes WordPress-Problem ist aber sehr ärgerlich in der täglichen Arbeit, stelle ich hier einen simplen Patch vor. Ich werde sowohl WordPress als auch MoxieCode informieren, aber das kann etwas dauern, bis sich dazwischen etwas bewegt.

Die fehlerhafte Stelle ist in: /wp-includes/js/tinymce/plugins/spellchecker/classes/GoogleSpell.php zu finden und sieht so aus:

	/**
	 * Returns suggestions of for a specific word.
	 *
	 * @param {String} $lang Language code like sv or en.
	 * @param {String} $word Specific word to get suggestions for.
	 * @return {Array} Array of suggestions for the specified word.
	 */
	function &getSuggestions($lang, $word) {
		$sug = array();
		$osug = array();
		$matches = $this->_getMatches($lang, $word);

		if (count($matches) > 0)
			<strong>$sug = explode("\t", utf8_encode($this-&gt;_unhtmlentities($matches[0][4])));</strong>

		// Remove empty

Wenn man die rot markierte Zeile, hier nochmal wiederholt:
$sug = explode("\t", utf8_encode($this->_unhtmlentities($matches[0][4])));
durch diese Änderung ersetzt (ist nichts anderes, als den doppelten encode rauszunehmen):
$sug = explode("\t", $this->_unhtmlentities($matches[0][4]));
dann bekommt man ein wunderschönes Ergebnis (auch wenn Google da noch die Worte fehlen…):

Korrektur der Sonderzeichenbehandlung

Kleine Änderung, aber große Wirkung. Ich hoffe, dass es einigen von euch nützlich sein wird und ich bemühe mich, diesen Fehler umgehend an die richtigen Stellen weiterzuleiten. In der Zwischenzeit sollte ein Arbeiten mit der Rechtschreibprüfung dadurch wieder sinnvoll möglich sein.