echo $begrüßung;
Also ich benutze phpMyAdmin 2.9.1.1-Debian-3. Die MYSQL-Datenbank läuft mit Zeichencode utf-8.
Wenn du mit Datenbank in dem Fall den Server als ganzes meinst, dann ist diese Angabe für deine Daten weniger wichtig. Sie dient oft nur als Default-Wert, wenn in untergeordneten Elementen (Datenbanken, Tabellen, Felder, Client-Verbindungen) keine expliziten Festlegungen getroffen wurden.
Auch die Kodierungsangabe der Datenbank (hier: Container für die Tabellen) ist nur ein Default-Wert für neu angelegte Tabellen, und der Wert für eine Tabelle ist nur ein Default-Wert für neu angelegte Felder.
Alle Spalten, die ich dort angelegt habe, laufen ebenfalls über utf-8.
Hast du da auch Zeichen jenseits von reinem ASCII abgelegt, z.B. Umlaute als direkte Zeichen, nicht als HTML-Entities? Und sind diese in Ordnung?
Die einzige Spalte die eine andere Zeichencodierung hat, ist die Spalte mit russischem Content. Dieser wird, wie nicht anders vermutet, natürlich im russischen Zeichenformat geschrieben.
"Russisches Zeichenformat" ist kein besonders günstiger Ausdruck. Es gibt russische (oder vielleicht besser kyrillische) Zeichen, die sehen z.B. so aus: Ю Ж Л. Und es gibt Zahlenwerte, die diese Zeichen repräsentieren. Je nach Vorschrift sind das unterschiedliche. In KOI8-R ist das Ж als F6 kodiert und in Unicode als 0416, was in UTF-8 zu D0 96 wird.
Dafür habe ich bemerkt, brauche ich den kio8-r Zeichensatz, sonst kommt in PhpMyAdmin nur noch Fragezeichen an. Diese Spalte habe ich umgestellt und damit wird es in PMA ordentlich angezeigt.
Dann machst du irgendwas verkehrt. Wenn du mit dem MySQL-Server UTF-8 vereinbart hast und ihm UTF-8-kodierte Zeichen sendest, dann kommen keine Fragezeichen zustande (es sei denn, es handelt sich um ein richtig kodiertes solches).
Ich beziehe mich auf die Ausgabe der Zelle, die ich in PMA mit koi8-r Zeichensatz versehen habe. Lese ich also den Wert mit PHP über MYSQL_REQUEST aus, und zeige diesen auf der Seite an, stehen dort statt der richtigen Zeichen Fragezeichen.
Vielleicht solltest du dir mal die genauen Byte-Werte ausgeben lassen, die du bekommst. In ein lesbares Format bekommst du sie mit bin2hex() oder auch url_encode(). Diese Nachforschungen müssten aber nicht sein, wenn du nach dem Verbindungsaufbau "SET NAMES utf8" an den MySQL-Server sendest oder noch besser die mysqli-Funktionen oder -Klassen und mysqli_set_charset() verwendest. Dann sorgst du dafür, dass du UTF-8-Kodiertes an den Server sendest und der sorgt dafür, dass du UTF-8-Kodiertes erhältst. Und die Felder stellst du alle auf UTF-8 und alles wird gut :-)
WOW, das klingt gut, könntest Du/Sie/... mir bitte einen Code-snipsel posten, wie ich das in den MYSQL_REQUEST übernehme. Das Problem ist, dass ich ja sowohl utf-8, wie auch koi8-r ausgeben möchte. Also für Deutsch(und was sonst noch für Sprachen sind) utf-8 und für Russisch dann das ganze in koi8-r.
SET NAMES ... sendet man als eigenständige Anweisung über einen mysql_query()-Aufruf an den MySQL-Server. (Beispiele für mysqli_set_charset() gibt es im PHP-Handbuch.)
Ich hoffe, du hast nun verstanden, dass bei Verwendung von UTF-8 kein KOI8-R mehr notwendig ist, und dass der MySQL-Server sein Ergebnis immer nur in einer einzigen Kodierung zurückliefert / zurückliefern kann. Wenn du immer noch beide Kodierungen brauchst, dann musst du zwei Abfragen starten. Bei der einen muss die Client-Vervindungskodierung auf UTF-8 stehen, bei der anderen auf KOI8-R. Also zwischendurch SET NAMES ausführen.
echo "$verabschiedung $name";