moziloWiki mit PHP 5.4: Leere Einträge (und was man dagegen tun kann)

  • 1 Antworten
  • 6813 Aufrufe
*

Offline azett

  • Coder
  • Mitglied
  • 2401
Das Problem
Bei einem Umzug einer moziloWiki-Instanz auf einen anderen Server stolperte ich über folgendes Problem: Das Wiki an sich - Layout, Menüs, die ganze Seitenstruktur - wurde zwar korrekt angezeigt, nicht aber die Inhalte der einzelnen Einträge. Die blieben einfach leer.

Die Ursache
Auf dem neuen Server läuft PHP 5.4 - und da hat sich etwas an der von moziloWiki verwendeten Funktion htmlentities() verändert: Der Wert des optionalen Parameters encoding ist nun nicht mehr ISO-8859-1, sondern UTF-8.
Wird htmlentities() ohne den Encoding-Parameter aufgerufen, muss der übergebene Inhalt also UTF8-kodiert sein, sonst liefert die Funktion schlicht einen leeren String zurück. Genau das passiert bei moziloWiki, denn es arbeitet mit ISO-8859-1. Mit dem eingangs beschriebenen Ergebnis: Der Inhalt der Wiki-Einträge ist leer.

Die Lösung
Beim Aufruf der Methode htmlentities() in moziloWiki muss man explizit angeben, dass der übergebene Text in ISO-8859-1 vorliegt. Dann zeigt moziloWiki wieder den Inhalt der Einträge an.
Man nehme also Zeile 62 in WikiSyntax.php...
// content formatting
$content = htmlentities($content);
...und ersetze sie durch...
// content formatting
$content = htmlentities($content, ENT_COMPAT | ENT_HTML401, "ISO-8859-1");

Und schon funktioniert moziloWiki auch mit PHP 5.4 :)

*

Offline azett

  • Coder
  • Mitglied
  • 2401
Re: moziloWiki mit PHP 5.4: Leere Einträge (und was man dagegen tun kann)
« Antwort #1 am: 12. Oktober 2013, 13:11:57 »
Nachtrag:
Nicht nur Einträge bleiben u.U. leer, sondern auch Wiki-Standardtexte (z.B. das Wort "Paßwort" in der Login-Maske). Das Problem ist dasselbe wie oben beschrieben, die Lösung auch.

Diesmal in Zeile 36 der WikiLanguage.php. Dort muss es statt
Code: (PHP) [Auswählen]
return htmlentities($value);natürlich heißen:
Code: (PHP) [Auswählen]
return htmlentities($value, ENT_COMPAT | ENT_HTML401, "ISO-8859-1");