phpPgAdmin, UNICODE und postgreSQL

phpPgAdmin, UNICODE und postgreSQL

am 21.09.2006 20:25:59 von Eberhard Spittler

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

am 25.09.2006 15:31:58 von Helmut Chang

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

am 26.09.2006 07:05:49 von Eberhard Spittler

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:

> phpPgAdmin
>
>
>
>

.... und im Frame mit der Datenanzeige:

>
>
> phpPgAdmin - Tabellen
>
>
>

Was jetzt wohl gilt?

--


------------------------------------------------------
Eberhard Spittler
[ Spämm geht in's Nirwana, Adresse funktioniert aber ]

Re: phpPgAdmin, UNICODE und postgreSQL

am 26.09.2006 09:19:28 von Helmut Chang

Eberhard Spittler schrieb:

> Im äußersten Frame heißt es:
....
>>

Das gilt (nicht) für diese Datei.

> ... und im Frame mit der Datenanzeige:
....
>>

Das gilt (nicht) für diese Datei.

Soll heißen:

Wenn dann gilt die -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

am 27.09.2006 07:29:01 von Eberhard Spittler

Helmut Chang schrieb:
...
> Wenn dann gilt die -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 Glück.

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. Ursprünglich 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 zurückzuführen sei, sondern die
relativ alte MC-Version von Debian das "noch nicht" könne.

--


------------------------------------------------------
Eberhard Spittler
[ Spämm geht in's Nirwana, Adresse funktioniert aber ]

Re: phpPgAdmin, UNICODE und postgreSQL

am 27.09.2006 11:36:06 von Helmut Chang

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 -Tag überhaupt nicht.

gruss, heli

Re: phpPgAdmin, UNICODE und postgreSQL

am 27.09.2006 12:17:34 von Eberhard Spittler

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 -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 heißt das jetzt. Daß das ein Fehler ist, leuchtet mir schon
ein, aber ich bin zu doof, den zu interpretieren. :-(

--


------------------------------------------------------
Eberhard Spittler
[ Spämm geht in's Nirwana, Adresse funktioniert aber ]

Re: phpPgAdmin, UNICODE und postgreSQL

am 27.09.2006 12:42:36 von Eberhard Spittler

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 -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 nötigen Schriften vorhanden sind.

Bleibt also die Gretchenfrage: Wo stelle ich jenen ominösen "header" ein?

--


------------------------------------------------------
Eberhard Spittler
[ Spämm geht in's Nirwana, Adresse funktioniert aber ]

Re: phpPgAdmin, UNICODE und postgreSQL

am 27.09.2006 14:07:43 von Helmut Chang

Eberhard Spittler schrieb:

> Bleibt also die Gretchenfrage: Wo stelle ich jenen ominösen "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 dämliche -Tag erzeugt wird und ersetzt das durch
header('Content-Type:...'); Ich rate, dass das Ding diesen abhängig von
der Codierung der Datenbank erzeugt.

Allerdings darf dann vorher keine Ausgabe passieren.

gruss, heli

Re: phpPgAdmin, UNICODE und postgreSQL

am 28.09.2006 22:18:21 von Eberhard Spittler

Helmut Chang schrieb:

>> Bleibt also die Gretchenfrage: Wo stelle ich jenen ominösen "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 dämliche -Tag erzeugt wird und ersetzt das durch
> header('Content-Type:...'); Ich rate, dass das Ding diesen abhängig von
> der Codierung der Datenbank erzeugt.

Jetzt habe ich für 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 darüber der Kommentar "default charset to iso-8859-1"; also müßte
ich vermutlich da was drehen?


--


------------------------------------------------------
Eberhard Spittler
[ Spämm geht in's Nirwana, Adresse funktioniert aber ]