Der Martin: Zeichencodierung ändern

Beitrag lesen

problematische Seite

Hallo Daniel,

ich bin immer noch beim Relaunch der o.g. Seite, dabei möchte ich u.a. die Codierung der Seite und Datenbank ändern, von Latin1/ISO-8859-1 zu UTF8.

das ewige Mysterium Zeichencodierung. 😉

$dsn_alt = 'mysql:host=' . DB_HOST . ';dbname=' . DB_NAME . ';charset=latin1';
$dsn_neu = 'mysql:host=' . DB_HOST . ';dbname=drarbeit;charset=utf8mb4';

$db_alt = new PDO($dsn_alt, DB_USER, DB_PASS, $opt);
$db_neu = new PDO($dsn_neu, DB_USER, DB_PASS, $opt);

$value = mb_convert_encoding($value, "UTF-8", "ISO-8859-1");

Das sieht im Prinzip richtig aus. Abgesehen davon, dass $value nirgends definiert wird. Das eigentliche Lesen aus der Datenbank hast du hier wohl weggelassen.

Leider werden nicht alle Zeichen korrekt umgewandelt und ich finde das Problem nicht. Ein Beispiel (Absatz "Beschreibung"):

Aktuelles Angebot: http://drarbeit.de/drarbeit/php/arch_get.php?angebot=nr14680

Diese Seite kommt in Windows-1252 daher, nicht ISO-8859-1.

Nach Umwandlung: http://drarbeit.de/test.html

Hmm. Die Bullets werden zu Fragezeichen, also dem Ersatzzeicehn für "ungültig". Die verwendeten Bullets haben in Windows-1252 den Code 0x95. In ISO-8859-x ist aber der Bereich 0x80..0x9F nicht definiert. Deswegen setzt mb_convert_encoding() hier zu Recht ein "invalid character".

Ich vermute, dass viele Nutzer ihren Text einfach aus Word per copy&paste einfügen, dabei werden diese Aufzählungszeichen mitgenommen.

Hat jemand eine Idee, warum die nicht richtig umgewandelt werden bzw. wie ich das hinbekomme?

Vermutlich würde es schon helfen, wenn du die Quell-Codierung korrekt als Windows-1252 angeben würdest.

Einen schönen Tag noch
 Martin

--
Prostituierte zum Stammgast: Schön, dass du mal wieder gekommen bist.