# Sonderzeichen -> Fragezeichen



## bLeEd (28. September 2005)

Hallo miteinander,

 Ich habe meines erarchtens nach ein etwas komplexes Problem. Und zwar will ich in Zukunft Seiten nur noch mit mutlibyte charsets schreiben sprich utf-8 von unicode. Das Problem hierbei ist das momentan alle Sonderzeichen als Fragezeichen ("?") dargestellt werden, MySQL-Datenbank habe ich bereits auf utf-8 umgestellt, PHP auch schon mit Multibyte kompiliert und im Dokument jeweils die korrekte encoding Angabe gemacht (header). Das Paradoxe bei der Sache ist aber das es unter PMA wunderbar geht sprich ich kann unter utf-8 Sonderzeichen wild selektieren oder schreiben und absenden. Wenn ich dies jedoch mit meiner eigenen Seite versuche scheiter ich kläglich. Ich bin ziemlich verzweifelt da ich schon mehrere tage damit verbringe eine Seite unter utf-8 zum laufen zu kriegen, daher freue ich mich über jede Denkbeteilligung eurerseits.

  Ich bedanke mich im voraus.

  Grüsse bLeEd


----------



## Gumbo (28. September 2005)

Ist das PHP-Skript selbst mit UTF-8-Kodierung gespeichert? Wird das Dokument als UTF-8-kodiert ausgeliefert (charset-Parameter des Content-Type-Header-Feldes)?


----------



## bLeEd (29. September 2005)

nunja da ich unter win32 arbeite sollte es schon mit utf-8 geschrieben sein. das ist aber gar nicht das bedeutende da ich das skript mit keinen sonderzeichen bestücke das heisst es würde synchron laufen falls es iso wäre. das problem sind die user inputs sprich POST / GET / COOKIE die werden falls sie zur datenbank hin und zurück transferiert werden "kaputt" im falle von vorhandenen sonderzeichen.

 ** edit: ja der header wird mit dem entsprechenden charset korrekt mitgesandt. (w3c tested)


----------



## Gumbo (29. September 2005)

Im HTML-Formularelement form sollte ebenfalls das accept-charset-Attribut auf utf-8 gesetzt sein, sodass die Daten als UTF-8-kodiert gesendet werden.


----------



## bLeEd (29. September 2005)

habe ich gemacht, funktioniert dennoch nicht.

 um den sachverhalt nochmal genauer an den tag zu legen: wenn ich ein datensatz per phpmyadmin hinzufüge wird es korrekt angezeigt und gespeichert in pma (utf-8), auf der seite wo ich es abrufe dann aber nicht. und umgekehrt was ich auf der seite per form hinzufüge sieht auf der seite korrekt aus aber im pma ist es dann kaputt. ich tendiere dazu das bei meiner seite was nicht stimmt.. logischerweise


----------



## Bailor (17. Januar 2006)

Ich habe - glaub ich - genau dasselbe Problem... @bleed: hast du es inzwischen lösen können?

Ich habe bei mir PHP-script und alles was ich in der Datenbank (mysql v. 4.1.14) via phpmyadmin einstellen konnte auf utf-8 umgestellt. Html-Dokument wird mit korrekten Zeichensatz-Definitionen ausgeliefert.
In phpMyAdmin werden Umlaute ohne Fehler angezeigt; in mein Script bekomm ich allerdings die Daten nur latin1 bzw. iso-8559-1 encodiert.
(Beweis: utf8_encode() auf den echo-string angewendet, liefert mir die Daten im richtigen Charset).

Lustig ist, dass es mit älteren mysql-versionen ohne utf8_encode funktioniert. Da stelle ich mit phpmyadmin (auch) "nur" die Sprache auf de_utf8, trage Daten ein, und feddisch 

Wie bekomme ich also MySQL ab Version 4.1.14 dazu, dass er mir genauso wie die älteren Versionen des Zeug eben UTF8-encodiert speichert und zurück gibt?


Oder hab ich da irgendwo einen Denkfehler?


----------



## Bailor (17. Januar 2006)

Ich beantwort mir des ganze selber:

nach noch ein bischen mehr stöbern im Forum bin ich auf diesen Beitrag hier gestoßen.
Mac Bain hat am Ende herausgefunden, wie man aus einem php-script heraus mysql mitteilt, in welchem charset man die Daten denn gerne geliefert hätte:

```
mysql_query("SET NAMES 'utf8'");
mysql_query("SET CHARACTER SET utf8");
```

zugehörige seite in der sql-doku: SET-Syntax.


----------

