WordPress-Plugin: Remove TinyMCE NBSP

UPDATE 1.3 (22.03.2016) Das Plugin greift jetzt auch bei den Excerpts ein.

UPDATE 1.2 (06.02.2016) Per Workaround sind nun auch geschützte Leerzeichen möglich.

Vorhin hatte ich Euch über mein Problem mit den Zeilenumbrüchen in WordPress berichtet, die vom Editor TinyMCE verursacht werden. Nachdem ich herausgefunden hatte, wie ich die für diesen Bug verantwortlichen No-Break-Spaces erkennbar mache, habe ich noch weiter geforscht.

Inzwischen ist daraus sogar ein Plugin entstanden, was die manuelle Suche unnötig macht. Da meine Programmierer-Skills irgendwo zwischen Knäckebrot und Schluckauf liegen, war das eine richtige Meisterleistung – aber ich bin glücklich, dass es läuft. Und hier ist es:

 

Remove TinyMCE NBSP als Plugin

‣ Download: remove-tinymce-nbsp-1.3.zip (1 kB, Version: 1.30a, Stand: 22.03.2016)

 

Installation

Im Backend über Plugins > Installieren > Plugin hochladen gehen und die ZIP-Datei auswählen. Nach der Installation auf Aktivieren klicken – das war’s. Es gibt keine Einstellungen zu machen. Das Plugin arbeitet im Hintergrund, sobald man im Editor ist. Denke ich jedenfalls.

Hinweis: Verwendung auf eigene Gefahr! Wie jeder Programmierer sage auch ich, dass es bei mir perfekt funktioniert. Wenn es Euch die Datenbank zerkloppt oder Eure Wohnung wegen des 100-Meter-Feuerballs bei LiveLeak zu sehen ist, dann habt Ihr was falsch gemacht.

 

Funktionsweise

Stundenlang habe ich herumprobiert, wie ich es schaffe, dass jedes   zwischen Worten ersetzt wird, dass es aber in Absätzen erhalten bleibt. Nichts wollte klappen. Der Geistesblitz kam mir dann – typisch Klischee – aufm Klo:

Einen Absatz erkennt man in WordPress daran, dass das   direkt von einem Zeilenumbruch gefolgt wird. Ein geschütztes Leerzeichen zwischen Worten logischerweise nicht. Das Plugin würde den Code im Artikel zerhacken, darum habe ich ihn mal zur Ansicht als Text-Datei verlinkt.

 

Im Detail

Ich ersetze zuerst alle   mit Zeilenumbruch dahinter durch eine temporäre Zeichenfolge, die nirgendwo nochmal auftreten dürfte (Zeile 26). Im nächsten Schritt ersetze ich dann alle übrigen noch auftretenden   durch ein einfaches Leerzeichen (Zeilen 27/28).

Sollten dadurch zwei Leerzeichen hintereinander entstanden sein, werden die zu einem einzelnen Leerzeichen geschrumpft (Zeile 29). In Zeile 30 kommt die Magie: Meine temporäre Zeichenfolge wird wieder zu   gemacht und die Absätze bleiben erhalten.

Update 1.2: Siehe nächster Absatz.

 

Ich brauche aber geschützte Leerzeichen!

Weil es durch normale Leerzeichen ersetzt wird, kann man jetzt kein   mehr verwenden, um z.B. Zahlen mit Maßeinheiten zu verbinden, damit kein Umbruch dazwischen entsteht. Dafür gibt es aber mit   ein anderes geschütztes Leerzeichen.

Das ist zwar etwas schmaler als sein Geschwisterchen, was aus typographischer Sicht aber sogar die bessere Wahl darstellt. Leider zerpflückt TinyMCE das ebenfalls und zeigt nach dem Speichern &undefined; an, was ich in den Zeilen 14, 31 und 42 bis 48 mit einem Workaround umgehe:

Als geschütztes Leerzeichen setzt man nun einfach   ein. Das ist zwar nicht richtig, aber es wird beim Speichern in das von uns gewünschte   umgewandelt (Zeile 31). Beim Editieren wird es wieder als das von TinyMCE akzeptierte   angezeigt (Zeile 43).

Wichtig: Vor dem Eingeben des   von „Visuell“ auf „Text“ umschalten.

4 Kommentare zu diesem Artikel

Name: Daniel  |  Datum: 26. Mai 2016  |  Zeit: 14:54

Danke,
mit deinem Plugin löst du ein Problem was mich seit Tagen beschäftigt.

Wieso lädst du es nicht bei WordPress direkt hoch? Nach unzählige Recherchen kann ich dir sagen das es da draußen viele Blogger gibt die dieses Problem auch stört ;)

Dein Plugin bietet eine ideale und vor allem dauerhafte Lösung dafür :)

NetzBlogR

Name: NetzBlogR  |  Datum: 27. Mai 2016  |  Zeit: 02:05

Ganz einfach: Ich habe keine Ahnung, wie das geht. :D

Name: Markus  |  Datum: 15. Oktober 2017  |  Zeit: 22:00

Schönes Plugin.

Aber es geht noch einen Tick einfacher:

Fügt folgenden Code in die functions.php eures Themes ein und alle versteckten   werden vor der Ausgabe auf der Homepage durch normale Leerzeichen ersetzt. Dies funktioniert auch für bereits veröffentlichte Titel, sodass das Abändern aller bisherigen Posts (wie mit deinem Plugin nötig) entfällt. Ich hoffe, dass ich helfen konnte. Viele Grüße!

function ilc_filter_content($content) {
	// Remove all  
	$content = htmlentities($content, null, 'utf-8');
        $content = str_replace(" ", " ", $content);
	$content = html_entity_decode($content);
	
	return $content;
}
add_filter('the_content', 'ilc_filter_content');
NetzBlogR

Name: NetzBlogR  |  Datum: 15. Oktober 2017  |  Zeit: 22:11

Markus, danke für das Feedback!

Das Problem bei Deiner Lösung ist leider, dass Abstände, die mit <p>&nbsp;</p> erzeugt werden, dadurch sozusagen „verschwinden“. Aber die Idee ist cool. Ich werde mal schauen, wie ich das miteinander kombiniere. Einen Workaround für das Abstand-Problem habe ich ja bei meinem Plugin schon. :-)

Hinterlasse einen Kommentar





Alle mit * gekennzeichneten Felder müssen ausgefüllt werden. Die eMail-Adresse wird nicht offen dargestellt.

Ich erlaube mir, reine Werbeeinträge oder persönliche Beleidigungen zu löschen. Anonyme Kommentare werden generell nicht mehr freigeschaltet: Ich schreibe hier als reale Person und darf erwarten, dass jeder zu der Meinung steht, die er äußert.