Avatar

MLF 1.7.3: Changed to PHP 5.5 -> Special chars bug? (Technics)

by Auge ⌂, (2886 days ago) @ wo2010

Hallo

Da der Fehler auf dem Webserver auftritt, sind seine Auswirkungen natürlich in allen Browsern zu sehen.


Nur als Ergänzung: Auch bei dem SQL-Dump über die Forums-Administration bleiben die Felder mit Umlauten leer.

Ja, wenn es das Skript überall auf die gleiche Weise tut, dann konsequenterweise auch überall falsch.

Hast du Zugang auf phpMyAdmin? Wenn ja, schaue bitte nach, ob die Forumstabellen selbst und die Textfelder eine Kollation aus dem Bereich ISO-8859-1 oder -15 haben.


Die Kollation ist bei allen genutzten Tabellen und Zeichenfeldern "latin1_swedish_ci". Auch bei der _funktionierenden_ Drittanwendung.

Gut. Nicht mehr zeitgemäß, aber für dein Skript passend.

Wenn ich mich per phpMyAdmin einlogge, gibt es neben unserer Datenbank noch eine zweite: "information_schema". Dort steht überall, soweit ich das überblicke, "utf8_general_ci".

Das sind Systeminterna, quasi die Standardvorgaben, wenn bei der Tabellenerstellung nichts anderes definiert wird. Allerdings gelten diese Standardvorgaben auch für die Verbindungen zum lesen und schreiben von Daten.

Klicke bitte auf die Seite selbst (forum.php, board.php oder welche Seite auch immer du aufgerufen hast). Rechts wird ein neuer Kasten mit den Metadaten der Anfrage und der ausgelieferten Antwort eingeblendet. Die Antwortkopfzeilen enthalten unter Anderem die Zeile "Content-Type", die in diesem Forum den Wert "text/html; charset=utf-8" hat. Welcher Wert wird bei dir angegeben?


Nur "text/html".

Aha! Dein Webserver sendet keine Information zur Zeichenkodierung.

Da sind also zwei mögliche Baustellen.

1. Verbindung mit der Datenbank, explizite Vorgabe der Zeichenkodierung ISO-8859-1 für die Verbindung.

// functions.php, irgendwo bei Zeile 260
 
 // connects to the database:
 function connect_db($host,$user,$pw,$db)
 {
  global $lang;
  $connid = @mysql_connect($host, $user, $pw);  // Datenbankverbindung herstellen
  if(!$connid) die($lang['db_error']);
  mysql_select_db($db, $connid) or die($lang['db_error']);
  return $connid;
 }
 
// ersetzen durch
 
 // connects to the database:
 function connect_db($host,$user,$pw,$db)
 {
  global $lang;
  $connid = @mysql_connect($host, $user, $pw);  // Datenbankverbindung herstellen
  if(!$connid) die($lang['db_error']);
  mysql_select_db($db, $connid) or die($lang['db_error']);
  mysql_set_charset("ISO-8859-1", $connid) or die($lang['db_error']); // <= neue Zeile, Funktion ab PHP 5.2.3 verfügbar
  return $connid;
 }

Bitte erst einmal bei Schritt 1 bleiben und das Ergebnis testen. Erst wenn erkennbar ist, dass sich etwas getan hat oder auch nicht, Schritt 2 ausführen.

2. Auslieferung der generierten Seiten

// inc.php, gleich hinter den Copyright-Block und die Festlegung für das Error-Reporting
 
header('Content-type', 'text/html; charset=iso-8859-1');

PS: Was bedeutet in phpMyAdmin die Information "Überhang" bei einigen Tabellen?

Für die einzelnen Felder in den Tabellen sind Größen, z.B. die in einer Textspalte speicherbare Anzahl von Zeichen (varchar(50)), vorgegeben. Wird diese Größenvorgabe durch die Daten nicht ausgenutzt, ergibt sich ein Überhang. Das ist nichts schlimmes. Bei vorhersehbaren Datenstrukturen kann man die Feldgrößen anpassen, bei einem Forum weiß man aber nicht, was und wieviel eigegeben wird. Also lebt man mit den Überhängen.

Tschö, Auge

--
Trenne niemals Müll, denn er hat nur eine Silbe!


Complete thread:

 RSS Feed of thread