Codierungs-Turbulenzen (Technics)
Hallo Auge,
Ich sehe es jetzt so:
Bei der alten PHP-Version (hier 5.2) hat htmlspecialchars() in der Datenbank die Zeichenkodierung vorgefunden, für die es selbst auch voreingestellt ist. Die Umkodierung lief glatt.
Bei der neuen PHP-Version (hier 5.5) wird voreingestellt UTF-8 erwartet, was zu stillem Abbruch bei der ganzen ISO-8859-1-Textumsetzung des Feldes führt.
Ja, sobald ein nicht zur Kodierung passendes Zeichen auftaucht, bricht die Funktion ab.
Offenbar werden die Daten unterschiedlich in der Datenbank abgelegt. Bei PHP 5.2 (ich schreibe vorsichtshalber nicht "mit PHP 5.2") wurde mehr maskiert, jetzt bei PHP 5.5 offenbar nicht (mehr).
Ah, jetzt wird ein Schuh draus (oder zumindest besteht die Chance dazu). Schreibe bitte den unten folgenden Code in eine Datei, speichere sie als test.php
(oder wie du sie auch immer nennen willst), lade sie auf deinen Webspace und rufe sie im Browser auf.
<?php echo '<pre>' . ini_get('magic_quotes_gpc') . '</pre>'; ?>
Zitat aus dem PHP-Manual zu magic_quotes_gpc:
"Legt die magic_quotes Einstellungen für GPC (Get/Post/Cookie) fest. Ist diese Einstellung auf on, werden alle ' (einzelne Anführungszeichen), " (doppelte Anführungszeichen), \ (Backslash) und NUL's automatisch mit einem Backslash geschützt."
… und …
"Warnung Dieses Feature ist seit PHP 5.3.0 DEPRECATED (veraltet) und seit PHP 5.4.0 ENTFERNT."
Es sollte zu einem Fehler oder zur Ausgabe von 0
kommen. Diese PHP-Einstellung wurde, wie oben zitiert, mit PHP 5.4 abgeschafft. Das MLF1-Skript macht jedoch bis Version 1.7.6 exzessiv Gebrauch von dieser Einstellung. Das ist "das Leiden" von MLF1.
Nun sollte das kein Problem sein, weil etwas, was nicht hinzugefügt wird, nicht behandelt werden muss. Es ist jedoch bei Altinstallationen doch da. Es sind die wahrscheinlich hunderte oder tausende Stellen, an denen im Inhalt der Beiträge eines Forums diese Backslashes seit immer da sind und nun aus den vorhandenen Daten entfernt werden müssen.
Da magic_quotes_gpc
nach den Regeln der Funktion addslashes
arbeitet, ist dazu, wenn man nicht Masochist ist und händisch an die Sache herangeht, die Funktion stripslashes
– eventuell, wegen Mehrfachsetzungen in Zitaten, in mehreren Durchläufen – das Mittel der Wahl. Aber sie entfernt wahrscheinlich auch die Backslashes, die z.B. in Windows-Hilfeforen als Verzeichnisnamen trennende Zeichen in Pfadangaben verwendet werden. "Wahrscheinlich", weil ich schon lange nicht mehr mit solchen Problemen zu tun hatte und mich nur noch dunkel daran erinnern kann, dass so etwas in Alex' damaligen MLF1-Projektforum diskutiert wurde.
Die Inhalte müssen schlussendlich aus der Datenbank entnommen, richtig behandelt und zurückgespeichert werden. Hier schlagen die je nach Anbieter unterschiedlichen Begrenzungen für Laufzeit und zugewiesenen Arbeitsspeicher für PHP-Skripte zu. Wie das zu lösen ist, müssen wir noch überlegen.
Wir müssen (und sollten) das jetzt vielleicht auch nicht weitertreiben. Es scheint ja nach außen dennoch zu funktionieren.
Ich wollte es nur rechtzeitig melden - jetzt würde ich die frisch dazugekommenen Beiträge ggf. noch 'reparieren' können. Später wäre es vielleicht Strafarbeit.
Da es, wie gesagt, eh "richtig" gemacht werden muss, kommen wir um "später" nicht herum. Im Zweifelsfall werden Texte vorübergehend falsch ausgegeben ("Carlo\'s Imbiss"). Das sieht unschön aus, macht aber technisch nichts kaputt.
Behalte dein ENT_QUOTES. Das hat, wie ich hoffentlich verständlich ausführte, mit deiner Beobachtung nichts zu tun. Das dahinter liegende Problem muss gesondert gelöst werden. Dafür bräuchte ich deine und, falls er noch da ist, auch Sebastians Hilfe bei Tests.
Ich will gern im Rahmen meiner Möglichkeiten helfen. Damals beim Kurs hatten wir uns einen WAMP-Server eingerichtet - ich hoffe, ich bekomme das aktuell auch noch hin.
Es wird eher darum gehen, Skripte mit Kopien Eurer Inhalte auf Euren Webspaces zu testen. Ich will eure Foreninhalte, wenn es sich vermeiden lässt, überhaupt nicht zu Gesicht bekommen. Wenn wir eine Lösung für Problem X erarbeitet haben – wer weiß, was auf uns wartet –, gehört dazu die Erstellung einer Kopie der Datenbanktabellen (geht über phpMyAdmin) und die Bearbeitung dieser Kopien mit den Skripten. Eine eigenen Serverinstallation braucht ihr nicht. Wenn alles gut läuft und die Ergebisse passen, brauchen die Tabellen nur umbenannt werden und ihr habt wieder ein von den Fehlern bereinigtes Forum.
Tschö, Auge
--
Trenne niemals Müll, denn er hat nur eine Silbe!