
phpPgAdmin, UNICODE und postgreSQL
Bisher liefen alle meine Datenbanken auf postgreSQL (7.4.7) als LATIN-1
ohne Probleme und die Aus- bzw. Eingabe ging über pgAdmin, MS-Access
(mit ODBC) oder auf phpPgAdmin ohne Zeichensatzprobleme.
Jetzt habe ich eine erste Unicode-Datenbank angelegt und versuchsweise
ein paar "sehr fremdsprachige" Daten eingetragen. pgAdmin-III macht auch
anstandslos mit, nicht so jedoch phpPgAdmin: nicht ASCII-Zeichen lassen
sich überhaupt nicht eingeben und die anderweitig eingegebenen werden
bei der Ausgabe entsetzlich verhunzt.
Beispiele:
> 42013|"1"|"1"|"2"
> 42014|"2"|"A"|"B"
> 42015|"3"|"3"|"4"
> 42016|"4"|"ö"|"Ä"
> 42017|"5"|"Идеи"|"больше специалистов"
> 42018|"6"|"ประพฤติผิดท"|"สิ้น ุดลงในวันขึ้น 15 ค่ำ เดือน"
> 42019|"7"|"Nghệ"|"t nhiều cho việc truyền bá Phật g"
> 42020|"8"|"変更"|"め、「精神遅"
> 42021|"9"|"протягом"|"івночі Гренландії"
> 42022|"10"|"زانیارییهکی"|"بکهن له نووسینی ئهو ئهنسیکل"
> 42023|"11"|"ஆப்பிள"|"இலங்கை தமிழ் அரசியல்வாத"
So wie oben kommt die Ausgabe von pgAdmin-III; phpPgAdmin liefert
dagegen folgendes:
> 1 2
> A B
> 3 4
> ö Ä
> Идеи больше ÑпециалиÑтов
> ประพฤติผิภ”ท à¸ªà¸´à¹‰à¸™à¸ªà¸¸à¸”à¸¥à¸‡à ¹ƒà¸™à¸§à¸±à¸™à¸‚ึà...
> Nghệ t nhiá»u cho việc truyá»n bá Pháºt g
> 変更 ã‚ã€ã€Œç²¾ç¥žé…
> протÑгом івночі Гренландії
> زانیاری‌یه‌کی بکه‌ن له‌ نووسینی ئه‌و ئه...
> ஆபà¯à®ªà®¿à®³ இலஙà¯à®•ை தமிழ௠அரசிà®...
Jetzt bin ich erst mal ratlos, wo ich den Fehler zu suchen habe:
auf der Server- oder auf der Client-Seite? PHP oder postgreSQL?
Der DB-Server läuft unter Linux.
Client-Versuche habe ich sowohl unter Linux als auch Windows-2000
gemacht - mit völlig gleichem Ergebnis.
--
------------------------------------------------------
Eberhard Spittler
[ Spämm geht in's Nirwana, Adresse funktioniert aber ]
Re: phpPgAdmin, UNICODE und postgreSQL
Eberhard Spittler schrieb:
[pgAdmin]
>> 42016|"4"|"ö"|"Ä"
....
[phpPgAdmin]
>> ö Ä
....
> Jetzt bin ich erst mal ratlos, wo ich den Fehler zu suchen habe:
>
> auf der Server- oder auf der Client-Seite? PHP oder postgreSQL?
Anhand obigem zu 99,9% auf der Seite von phpPgAdmin. Wenn der
Unicode-Daten aus der DB holt, sollte er dem Browser dann auch sagen,
dass die anzuzeigende Siete in Unicode (UTF-8) ist. Was sagt denn der
Content-Type-Header zur ausgegebenen Seite?
gruss, heli
Re: phpPgAdmin, UNICODE und postgreSQL
Helmut Chang schrieb:
> Anhand obigem zu 99,9% auf der Seite von phpPgAdmin. Wenn der
> Unicode-Daten aus der DB holt, sollte er dem Browser dann auch sagen,
> dass die anzuzeigende Siete in Unicode (UTF-8) ist. Was sagt denn der
> Content-Type-Header zur ausgegebenen Seite?
Danke für den Hinweis!
Im äußersten Frame heißt es:
> <title>phpPgAdmin</title>
> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
> <link rel="stylesheet" href="themes/default/global.css" type="text/css" />
> </head>
> <frameset rows="52,*,12">
.... und im Frame mit der Datenanzeige:
> <html lang="de_DE">
> <head>
> <title>phpPgAdmin - Tabellen</title>
> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
> <link rel="stylesheet" href="themes/default/global.css" type="text/css" />
> </head>
Was jetzt wohl gilt?
--
------------------------------------------------------
Eberhard Spittler
[ Spämm geht in's Nirwana, Adresse funktioniert aber ]
Re: phpPgAdmin, UNICODE und postgreSQL
Eberhard Spittler schrieb:
> Im uersten Frame heit es:
....
>> <meta http-equiv="Content-Type" content="text/html;
>> charset=ISO-8859-1" />
Das gilt (nicht) fr diese Datei.
> ... und im Frame mit der Datenanzeige:
....
>> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
Das gilt (nicht) fr diese Datei.
Soll heien:
Wenn dann gilt die <meta>-Angabe in der Frame Datei und nicht die der
Frameset-Datei. Aber in Wirklichkeit gelten wahrscheinlich beide nicht,
weil der HTTP-Header gilt. Wenn du Firefox benutzt: Kontextmen im
Datenframe -> Frameinformationen anzeigen.
gruss, heli
Re: phpPgAdmin, UNICODE und postgreSQL
Helmut Chang schrieb:
...
> Wenn dann gilt die <meta>-Angabe in der Frame Datei und nicht die der
> Frameset-Datei. Aber in Wirklichkeit gelten wahrscheinlich beide nicht,
> weil der HTTP-Header gilt. Wenn du Firefox benutzt: Kontextmen im
> Datenframe -> Frameinformationen anzeigen.
Firefox verwende ich zum Glck.
Da steht auf der Karteikarte namens "Allgemein" im Fenster "Meta" unter
"Name / Inhalt":
> text/html; charset=UTF-8
Schaut doch eigentlich gut aus.
So langsam frage ich mich, ob ich beim Einrichten des
(Server-)Betriebssystems was falsch gemacht habe. Ursprnglich lief
alles (auch alle Nutzerkennungen) unter ISO-8859-15; vor einigen Monaten
habe ich dann meine Anwenderkennung auf UTF-8 umgestellt. Da gibt es
aber noch einige Ungereimtheiten, da nicht alles richtig angezeigt
wird. Beispielsweise werden normale deutsche Umlaute im
MidnightCommander verhunzt. Irgendwo habe ich aber gelesen, da das
nicht auf fehlerhafte Einstellungen zurckzufhren sei, sondern die
relativ alte MC-Version von Debian das "noch nicht" knne.
--
------------------------------------------------------
Eberhard Spittler
[ Spmm geht in's Nirwana, Adresse funktioniert aber ]
Re: phpPgAdmin, UNICODE und postgreSQL
Eberhard Spittler schrieb:
> Da steht auf der Karteikarte namens "Allgemein" im Fenster "Meta" unter
> "Name / Inhalt":
>
>> text/html; charset=UTF-8
>
> Schaut doch eigentlich gut aus.
Nein. Nicht unter "Meta". Kodierung ist hier relevant. Wenn der
Webserver einen Header
"Content-type: text/html; charset=irgendwas-anderes" sendet,
interessiert eben der Inhalt vom <meta>-Tag berhaupt nicht.
gruss, heli
Re: phpPgAdmin, UNICODE und postgreSQL
Helmut Chang schrieb:
> Nein. Nicht unter "Meta". Kodierung ist hier relevant. Wenn der
> Webserver einen Header
> "Content-type: text/html; charset=irgendwas-anderes" sendet,
> interessiert eben der Inhalt vom <meta>-Tag berhaupt nicht.
Entschuldigung - das hatte ich ganz bersehen, da da noch was steht:
> Kodierung: ISO-8859-1
> Adresse: http://p450/phppgadmin/display.php?database=CD_DVD&schema=pu blic&subject=table&return_url=tables.php%3Fdatabase%3DCD_DVD %26amp%3Bschema%3Dpublic&return_desc=Zur%26uuml%3Bck&table=c d_beh&
Aber was heit das jetzt. Da das ein Fehler ist, leuchtet mir schon
ein, aber ich bin zu doof, den zu interpretieren. :-(
--
------------------------------------------------------
Eberhard Spittler
[ Spmm geht in's Nirwana, Adresse funktioniert aber ]
Re: phpPgAdmin, UNICODE und postgreSQL
Helmut Chang schrieb:
> Nein. Nicht unter "Meta". Kodierung ist hier relevant. Wenn der
> Webserver einen Header
> "Content-type: text/html; charset=irgendwas-anderes" sendet,
> interessiert eben der Inhalt vom <meta>-Tag berhaupt nicht.
Dank Deiner Anregung (und der daraufhin festgestellten falschen
Kodierung im Header) habe ich "Gewalt angewendet": den Firefox
angewiesen (Ansicht/Zeichenkodierung(Unicode (UTF-8)), das zu ignorieren
- et voil: alles bestens. Der Inhalt wird richtig dargestellt -
jedenfalls so weit die ntigen Schriften vorhanden sind.
Bleibt also die Gretchenfrage: Wo stelle ich jenen ominsen "header" ein?
--
------------------------------------------------------
Eberhard Spittler
[ Spmm geht in's Nirwana, Adresse funktioniert aber ]
Re: phpPgAdmin, UNICODE und postgreSQL
Eberhard Spittler schrieb:
> Bleibt also die Gretchenfrage: Wo stelle ich jenen ominsen "header" ein?
Entweder im Webserver oder in der php.ini, wobei es sich dann auf alle
Dokumente bezieht. Oder du suchst die im phpPgAdmin-Code die Stelle, wo
der dmliche <meta>-Tag erzeugt wird und ersetzt das durch
header('Content-Type:...'); Ich rate, dass das Ding diesen abhngig von
der Codierung der Datenbank erzeugt.
Allerdings darf dann vorher keine Ausgabe passieren.
gruss, heli
Re: phpPgAdmin, UNICODE und postgreSQL
Helmut Chang schrieb:
>> Bleibt also die Gretchenfrage: Wo stelle ich jenen ominsen "header" ein?
>
> Entweder im Webserver oder in der php.ini, wobei es sich dann auf alle
> Dokumente bezieht. Oder du suchst die im phpPgAdmin-Code die Stelle, wo
> der dmliche <meta>-Tag erzeugt wird und ersetzt das durch
> header('Content-Type:...'); Ich rate, dass das Ding diesen abhngig von
> der Codierung der Datenbank erzeugt.
Jetzt habe ich fr den Rechner mit dem Webserver und dem
postgreSQL-Server mal phpinfo() aufgerufen und folgendes Ergebnis erhalten:
> HTTP Headers Information
> HTTP Request Headers
> HTTP Request GET /info.php HTTP/1.1
> Accept text/xml,application/xml,application/xhtml+xml,text/html;q=0 .9,text/plain;q=0.8,image/png,*/*;q=0.5
> Accept-Charset ISO-8859-15,utf-8;q=0.7,*;q=0.7
> Accept-Encoding gzip,deflate
> Accept-Language eo,de-lu;q=0.9,de-de;q=0.8,de;q=0.6,fr;q=0.5,af;q=0.4,id;q=0 .3,vi;q=0.1
> Connection keep-alive
> Host p450.local
> Keep-Alive 300
> User-Agent Mozilla/5.0 (Windows; U; Windows NT 5.0; de; rv:1.8.0.7) Gecko/20060909 Firefox/1.5.0.7
> HTTP Response Headers
> X-Powered-By PHP/4.3.10-16
> Keep-Alive timeout=15, max=100
> Connection Keep-Alive
> Transfer-Encoding chunked
> Content-Type text/html; charset=iso-8859-1
In der /etc/php4/apache/php.ini ist nichts zum Zeichensatz zu finden,
aber in /etc/apache/httpd.conf findet sich
> AddDefaultCharset on
und darber der Kommentar "default charset to iso-8859-1"; also mte
ich vermutlich da was drehen?
--
------------------------------------------------------
Eberhard Spittler
[ Spmm geht in's Nirwana, Adresse funktioniert aber ]