Zeichencodierung ändern
bearbeitet von
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. 😉
> ~~~ PHP
> $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.
> 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](https://en.wikipedia.org/wiki/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.