Manche MySQL-Server sind so eingestellt, dass sie nicht wie meistens in latin1 o.ä. mit PHP reden, sondern zum Beispiel in Unicode.
Dies lässt sich zwar grundsätzlich über die Konfiguration des Servers einstellen, auf die hat man aber oft keinen Zugriff. Das Ergebnis sind seltsame Zeichen in Contenido und Fehlfunktionen, z.B. werden der Modulcode und Artikeltitel nach Sonderzeichen abgeschnitten etc.
Man kann die Standardeinstellung des Servers aber beim Zugriff überschreiben. Ich poste mal ein paar Änderungen an der db_mysql.inc im Ordner conlib, die den Server dazu bringen alles umzukodieren, sodass Contenido damit umgehen kann und keiner weiteren Änderungen bedarf:
Unterhalb von
Code: Alles auswählen
class DB_Sql {
/* public: connection parameters */
var $Host = "";
var $Database = "";
var $User = "";
var $Password = "";
Code: Alles auswählen
var $charset = 'latin1';
Außerdem unterhalb von
Code: Alles auswählen
/* public: connection management */
function connect($Database = "", $Host = "", $User = "", $Password = "", $charset = "") {
/* Handle defaults */
if ("" == $Database)
$Database = $this->Database;
if ("" == $Host)
$Host = $this->Host;
if ("" == $User)
$User = $this->User;
if ("" == $Password)
$Password = $this->Password;
Code: Alles auswählen
if ("" == $charset)
$charset = $this->charset;
Nur ein kleines Stück weiter unterhalb von
Code: Alles auswählen
/* establish connection, select database */
if ( 0 == $this->Link_ID || !is_resource($this->Link_ID)) {
$this->Link_ID=@mysql_connect($Host, $User, $Password);
if (!$this->Link_ID) {
$this->halt("connect($Host, $User, \$Password) failed.");
return 0;
}
Code: Alles auswählen
mysql_query('SET CHARACTER SET '.$this->charset, $this->Link_ID);
Siehe auch
http://dev.mysql.com/doc/refman/5.0/en/ ... ction.html
http://de2.php.net/manual/en/function.m ... coding.php
Das war es. Natürlich könnte man auch testen, ob das, was der DB-Server zurückliefert, Unicode ist und das dann entsprechend mit PHP konvertieren; dies hätte aber den Nachteil, dass es wahrscheinlich nicht so zentral zu implementieren wäre; außerdem sind die Konvertierungsfunktionen von PHP dürftig und letztlich würde man dann ja doch nicht damit arbeiten. Ich weiß außerdem nicht, ob es überhaupt möglich wäre, wenn der Server auf abstrusere fremdländische Zeichensätze gestellt wäre.
Könnte man doch eigentlich in die nächste Contenido-Version übernehmen, oder?