PDA

Vollständige Version anzeigen : Viewrenderer verursacht Zeichensatzproblem


TeeJay
11.07.2007, 14:49
Moin, ich doktor schon ne ganze Weile an einem Problem rumm, das mit dem Viewrenderer zusammenhängen muss. Also, ich benutze den erweiterten Viewrenderer (hier ausm Forum) für die Ausgabe und habe dabei Probleme mit Sonderzeichen die ich aus der Datenbank hole. Ich habe alles 3 Mal geprüft, die Tabellencols haben alle utf8-unicode-ci als Kollation. Auch alle Dateien wurden als UTF8 gespeichert. Der metatag steht natürlich auch auf

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

Ich habe dann mal Versucht dem Fehler auf die Spur zu kommen. Wenn ich den Viewrenderer abschalte und dann per Zend_Debug die Daten aus der Datenbank anzuschauen, dann erhalte ich einwandfreie Ergebnisse, genauso wie es sein soll. Mit viewrenderer hingegen nur ? ! Dann ist mir folgendendes aufgefallen wenn ich per POST Daten in die Datenbank geschrieben habe. ÜÄö und andere kommen dort in dieser Form an --> &Atilde;&curren; usw. Ich hab mir also gedacht, dass es am magicquotes liegen muss, allerdings brachte das Ändern des gpc Status auf OFF auch nichts. Könnt ihr mir vielleicht helfen ?

Gruß Tee

ach ja ÜÖÄö usw die in den Dateien stehen werden immer so angezeigt wie sie sollen !

Blackflash
11.07.2007, 14:56
Zend_Debug wandelt die Daten in deren HTML-Entitäten (unter Nutzung von UTF-8) um, was erklärt, weshalb die Daten mit Zend_Debug korrekt dargestellt werden. Hast du bereits Live-HTTP-Headers genutzt und geschaut, ob die Daten wirklich in UTF-8 ankommen? Es kann sein, dass es Diskrepanzen zwischen dem Meta-Tag und dem Charset des Headers bekommt. Wie sieht die Ausgabe in anderen Browsern aus?

Magic Quotes sichert (escape) Gänsefüßchen und Hochkommata, aber wandelt den Inhalt nicht in deren HTML-Entitäten um.

TeeJay
11.07.2007, 15:14
ich hab mal HTTP Libe Headers installiert

http://tdu:8888/de/admin/gattung/
GET /de/admin/gattung/ HTTP/1.1
Host: tdu:8888
User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X; de; rv:1.8.1.4) Gecko/20070515 Firefox/2.0.0.4
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Cookie: ZDEDebuggerPresent=php,phtml,php3; PHPSESSID=686704d3903e9738d2f6e7ede878a04c
Cache-Control: max-age=0

HTTP/1.x 200 OK
Date: Wed, 11 Jul 2007 15:18:37 GMT
Server: Apache/2.0.59 (Unix) PHP/5.2.0 DAV/2 mod_ssl/2.0.59 OpenSSL/0.9.7l
X-Powered-By: PHP/5.2.0
Set-Cookie: ZDEDebuggerPresent=php,phtml,php3; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Keep-Alive: timeout=15, max=70
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: text/html
des weiteren habe ich der view erklärt, das Sie doch in UTF-8 codieren soll. (funzt aber leider auch nicht)
$this->view->setEncoding('UTF-8');

Wenn ich in der view (index.phtml) mit utf8_encode() arbeite werden mir die Inhalte auch korrekt dargestellt, aber das ist nicht die Lösung !
Andere Browser außer Firefox kann ich immo nicht Testen weil ich auf meiner Mac Kiste gerade kein IE habe.

Wäre über jeden Tip Dankbar!

Update:
Da du ja sagtest, das es durch Zend_Debug verfäscht werden könnte habe ich mit print echo und print_r die Ausgabe getestet, und jeweils mit dem Ergebnis, dass die Sonderzeichen korrekt angezeigt werden (Viewrenderer ist dabei aus!).

Bleistift
11.07.2007, 15:22
Versuch mal noch mit einem header('content-type: text/html; charset=utf-8'); und suche im Forum mal nach "SET NAMES".

Blackflash
11.07.2007, 15:26
Lustigerweise bewirkt das Encoding kaum etwas - außer, dass es beim Aufruf von htmlentities genutzt wird.

Für mich scheint es so, als würde bei der Ausgabe alles in das ISO-Charset konvertiert.

TeeJay
11.07.2007, 15:27
jetzt bin ich ganz verwirrt. Ich habe aus meinem Seitentemplate

<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />

auskommentiert. Nun werden mir meine Daten aus der Datenbank richtig angezeigt, die Daten die jedoch in Dateien stehen fehlerhaft. Kann mir das jemand erklären ?

Blackflash
11.07.2007, 15:32
Anscheinend sind die Daten in der Datenbank ISO-8859-1 und die in deinen Dateien UTF-8.

Kaiuwe
11.07.2007, 15:39
- die Dateien sind (bestimmt) in UTF-8
- die Daten in der Datenbank sind in UTF-8
- der Content-Type wird durch die Standardeinstellung vom Server gesetzt, eventuell nicht UTF-8
- der Browser bekommt irgendwie keinen Zeichensatz mitgeteilt und nimmt daher die HTML-Meta-Angabe bzw. die Einstellung des Browsers
- Datenaustausch mit der Datenbank läuft nicht über UTF-8

Abhilfe:
- in PHP einen Header für UTF-8 senden (siehe Bleistift)
- den Datenaustausch mit der Datenbank auf UTF-8 setzen

TeeJay
11.07.2007, 15:50
also den php header habe ich gesetzt, ohne Erfolg. Meine Konsequenz ---> ISO-8859-1(latin1) sollte für English/Deutsch ja reichen, nur das Eurozeichen fehlt, was ich aber verschmerzen kann.

Kaiuwe
11.07.2007, 15:55
Du gibst aber schnell auf...! :rolleyes:

Hast du schon den Verbindungszeichensatz für die Datenbank gesetzt?
Musst einfach gleich nach der Verbindung zur Datenbank eine Abfrage absenden: "SET NAMES utf8".

Siehe http://dev.mysql.com/doc/refman/5.1/de/charset-connection.html

Nachtrag:
Übrigens reicht es auch die "Seiteninformationen" im Firefox anzuzeigen, um die Kodierung zu ermitteln.

TeeJay
11.07.2007, 16:06
Das hat nichts mit damit zu tun, dass ich das Problem nicht gern lösen möchte, ich habe nur nicht die Zeit Stunden zu verpulvern, in dennen ich andere Sachen machen könnte. ISO 8859-1 ist für meine belange vollkommen ausreichend. Das ganze kann auch an meiner MYSQL DB liegen wobei Verbindung und MYSQL Zeichensatz auf utf8-unicode-ci gesetzt sind. Naja ich muss das jetzt leider vertagen, da Zeit wertvoll ist.

ShoX
11.07.2007, 16:25
machn show variables like character_% und collation_%

wenn da nicht überall utf_8... steht (ausser ein binary) machn SET NAMES UTF8 (wenn du coll willst) COLLATE utf8_was-du-hast_ci

mfg

TeeJay
12.07.2007, 15:18
ich werde das mal alles ausprobieren, aber könnte mir mal jemand den inhalt seiner/ihrer my.cnf hier posten, weil bei meiner mamp version keine solche Datei existiert. wäre echt Klasse, da ich gerne mal etwas ausprobieren möchte.

Gruß Tee