dedlfix: Problem mit Darstellung Typographischer Anführungszeichen

Beitrag lesen

echo $begrüßung;

Ich habs jetzt geschafft mein Problem ganz einfach zu rekonstruieren:
Neue Datei anlegen im ISO Format:

Der Begriff "ISO" ist hier viel zu allgemein verwendet. Von ISO-8859 gibt es schon 16 Varianten. Du meinst vermutlich ISO-8859-1

print_r(utf8_encode('“”'));

Die Funktion arbeitet mit ISO-8859-1, das diese beiden Zeichen nicht enthält. Sie können deshalb nur als die beiden Steuerzeichen STS und CCH behandelt werden. Daraus erhältst du selbstverständlich auch nur die UTF-8-Kodierung für diese Steuerzeichen, nicht jedoch die für “ und ”. Wenn ein Browser bei ISO-8859-1 als Seitenkodierung und accept-charset-Attribut im Formular bei Eingabe der beiden Zeichen “ oder ” (oder anderer aus dem Windows-1252-Bereichn 80..9F) selbige als Windows-1252-kodiert zu dir sendet handelt er nach dem Motto: "Meine Lösung - dein Problem". Normalerweise kann er dir diese Zeichen legal nicht zusenden. Es gibt auch keine Reglung für irgendeine Ersatzdarstellung. Du kannst das Problem mit den PHP Extensions iconv (bevorzugt) oder recode (alt und weniger leistungsfähig) lösen, indem du von Windows-1252 nach UTF-8 kodieren lässt. Doch iconv und recode gehören nicht unbedingt zur Standardausrüstung von PHP.

Es muss also nicht unbedingt mit dem Einsatz der MySQL Datenbank zu tun haben.

Ja, MySQL hat hier keine Schuld, aber du hast da auch noch eine Baustelle offen.

Am besten wird es sein, wenn du alles komplett auf UTF-8 umstellst. Beachte dabei, dass alle Beteiligten a) mit UTF-8 umgehen können müssen und b) über die Verwendung von UTF-8 informiert sein müssen. Beteiligte sind mindestens Browser, PHP und MySQL.

PHP kann beimPunkt a) derzeit nur eingeschränkt mithalten. Wenn du keine Stringverarbeitung (Zeichen zählen, Zeichenketten trennen) damit machen möchtest, ist das egal. Wenn doch, gibt es die Multibyte-String-Extension, die aber auch nicht überall zur Verfügung steht (und wohl auch nicht sehr performant ist).

Für MySQL bedeutet a), dass die Felder eine entsprechende Kodierungseinstellung haben, und b), dass die Verbindungskodierung auszuhandeln ist (Stichwörter: mysql_set_charset(), SET NAMES, hiesiges Archiv).

Ein Problem sehe ich, das sind die derzeitigen Datenbankinhalte, die sicher nicht korrekt kodiert sind. Wenn du mit dem phpMyAdmin schaust, und der alles richtig anzeigt, hast du doch kein Problem. Wenn er aber Nicht-ASCII-Zeichen nicht richtig zeigt, musst du das erstmal korrigieren. Besonderes Augenmerk solltest du auf die Windows-1252-Zeichen legen, zu denen nicht nur deine beiden Problemkinder, sondern auch das €-Zeichen gehört. Wenn du es nicht korrigiert bekommst (vor dem Probieren Sicherheitskopie anlegen!), melde dich noch einmal mit einem Beispiel, wie die Sonderzeichen derzeit vom PMA dargestellt werden.

echo "$verabschiedung $name";