Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   [PHP/JS] Unicode-Problem (https://www.delphipraxis.net/67433-%5Bphp-javascript%5D-unicode-problem.html)

alcaeus 14. Apr 2006 22:06

Re: [PHP/JS] Unicode-Problem
 
Zitat:

Zitat von Frickeldrecktuxer_TM
Daß beim Zurücksenden an den Client dieser es richtig interpretiert, ist schonmal ein gutes Zeichen, denn jetzt gehen beim Hin- und Herkodieren keine Informationen mehr verloren (z.B. das Charset).
Ein- und Ausgabe geht also, jetzt musst du nur noch die Daten richtig konservieren. Funkt vielleicht die Datenbank durch eine eigene Zeichentranskodierung dazwischen, oder geschieht gar das Auslesen aus der Datenbank nach ISO-irgendwas oder ASCII/ANSI?

Jup, das ist leicht moeglich. Ich weiss nicht was meine grad eingestellt hat; das Problem ist jedenfalls, dass dieses System ja nicht nur auf meiner Datenbank anstaendig funktionieren muss, sondern auf mehreren; und dort kann ich das Charset nicht so umstellen wie es mir passt. Die Frage ist jetzt, wie ich das Ding noch codieren muss, damit es auch in der Datenbank richtig eingetragen wird :gruebel: Wenn es mal in der Datenbank passt, dann ist der Rest nur noch Peanuts *g*

Greetz
alcaeus

Flocke 14. Apr 2006 22:14

Re: [PHP/JS] Unicode-Problem
 
Zitat:

Zitat von alcaeus
Naja, IE und Firefox machen aus € nur '%E2%82%AC', was natuerlich dazu fuehrt, dass drei sonderbare Zeichen anstatt dem Euro-Zeichen eingefuegt werden.

Das ist aber genau die Codierung für "€" in UTF-8, drei Bytes mit den Werten $E2, $82 und $AC hintereinander. Vielleicht hast du ja schon genau das, was du brauchst, und glaubst es nur selbst nicht?

Zitat:

Zitat von alcaeus
PS: koennte mir evtl. jemand erklaeren, wie ich dieses Spezialformat umwandeln muss? Ich verstehe diese Tabelle nicht ganz :gruebel: :oops:

Macht meine Routine doch für dich. Im Grund musst du nur die Bits des Unicodes (in diesem Beispiel 20AC = 10.0000.1010.1100) von rechts nach links für die "x" einsetzen. Dann erhältst du die UTF-8 Repräsentation.

Code:
U-00000800 - U-0000FFFF: 1110xxxx 10xxxxxx 10xxxxxx
                       +       10   000010   101100
                         --------------------------
                       = 11100010 10000010 10101100
                               E2       82       AC
//----
Mist: da wird man abgelenkt und verpasst eine komplette Stunde :roll:

alcaeus 14. Apr 2006 22:17

Re: [PHP/JS] Unicode-Problem
 
Zitat:

Zitat von Flocke
Das ist aber genau die Codierung für "€" in UTF-8, drei Bytes mit den Werten $E2, $82 und $AC hintereinander. Vielleicht hast du ja schon genau das, was du brauchst, und glaubst es nur selbst nicht?

Jup, teilweise jedenfalls. An der Datenbank arbeite ich noch :)

Zitat:

Zitat von Flocke
Mist: da wird man abgelenkt und verpasst eine komplette Stunde :roll:

Ist schon ok, wenigstens weiss ich jetzt wie ich mit der Tabelle umgehn muss; das zu wissen kann nicht schaden :)

Greetz
alcaeus

Frickeldrecktuxer_TM 15. Apr 2006 11:21

Re: [PHP/JS] Unicode-Problem
 
Zitat:

Zitat von alcaeus
das Problem ist jedenfalls, dass dieses System ja nicht nur auf meiner Datenbank anstaendig funktionieren muss, sondern auf mehreren

Das ist immer das Problem, wenn man mit Strings arbeitet. Das wurde beseitigt, als man Unicode eingesetzt hat, aber das bringt auch nichts, wenn auch nur ein Glied kein Unicode spricht.
Die richtige Methode wäre eine Zeichensatzumwandlung in das Format, das die Datenbank gerade haben will und eine Rückumwandlung in ein Format, das du intern haben willst. Die Hinumwandlung sollte bereits der Datenbanklayer erledigen, das Zurückumwandeln im Idealfall auch, dafür müsste man der Datenbank aber mitteilen, in welchem Zeichensatz man den String haben will.
Vielleicht ist es hier einfacher, auf ein Datenbankobjekt zurückzugreifen, daß keinerlei Umwandlung durchführt, sondern lediglich das speichert, was du der Datenbank übergibst. Mal über ein BLOB nachgedacht? (Auch wenn es sich hier eher um ein Binary Small Object handelt ;-))

alcaeus 15. Apr 2006 11:26

Re: [PHP/JS] Unicode-Problem
 
Zitat:

Zitat von Frickeldrecktuxer_TM
Vielleicht ist es hier einfacher, auf ein Datenbankobjekt zurückzugreifen, daß keinerlei Umwandlung durchführt, sondern lediglich das speichert, was du der Datenbank übergibst. Mal über ein BLOB nachgedacht? (Auch wenn es sich hier eher um ein Binary Small Object handelt ;-))

Jain, eher nicht. Es geht ja eben um das Feld, das im phpBB die Beitraege speichert; und was mich ueberrascht ist, dass das Zeichen richtig ankommt wenn das Form normal abgesendet wird. Das Problem gibts nur, wenn das Absenden ueber JavaScript geschieht; irgendwo wird da was nicht korrekt umgewandelt. Ich muss mich heute erstmal wieder sammeln, und die Ganze Sache auseinanderfriemeln; irgendwo ist da der Wurm drin.

Greetz
alcaeus

Frickeldrecktuxer_TM 15. Apr 2006 11:36

Re: [PHP/JS] Unicode-Problem
 
Zitat:

Zitat von alcaeus
und was mich ueberrascht ist, dass das Zeichen richtig ankommt wenn das Form normal abgesendet wird.

Als was denn? UTF-8? ISO-8859-1? Windows-1252?
Vielleicht schickt der Browser es bei seiner HTTP-Anfrage in einem anderen Zeichensatz ab als du es über DOM ausliest und an das PHP-Script schickst?

alcaeus 18. Apr 2006 15:53

Re: [PHP/JS] Unicode-Problem
 
So, hat etwas laenger gedauert, aber ich musste erstmal das Fenster wechseln. Das kommt davon wenn man Scriptsprachen zum Fenster rauswirft, es vorher aber nicht oeffnet :wall:
Egal, zurueck zum Thema:

Zitat:

Zitat von Frickeldrecktuxer_TM
Als was denn? UTF-8? ISO-8859-1? Windows-1252?
Vielleicht schickt der Browser es bei seiner HTTP-Anfrage in einem anderen Zeichensatz ab als du es über DOM ausliest und an das PHP-Script schickst?

Zur Zeit ist das charset ISO-8859-1. Das Problem ist dass es manchmal UTF-8 ist, manchmal ISO-8859-x, praktisch kann es alles beliebige sein; je nachdem was in der Sprachdatei des phpBB eingestellt ist. Deshalb kann ich mich auf so eine Angabe nicht verlassen.
Ich habs jetzt natuerlich auch mal mit encodeURI() versucht. Jetzt kommt der "korrekte" String fuer € raus: %E2%82%AC. Der Server interpretiert dies bei einem rawurldecode() allerdings als "€", also alle drei Teile getrennt. Da war mir die alte Variante ja noch fast lieber; die kann ich wenigstens erkennen und bearbeiten.

Von anderer Seite gabs auch noch einen Tipp, dass ich auf Serverseite pack() verwenden sollte, aber die Verwendung der Funktion ist mir mehr als nur schleierhaft :(

Hat jemand einen Rat fuer mich (abgesehen von "lass es sein" :lol:)

Greetz
alcaeus

[add="ein paar stunden spaeter"]So, geht jetzt, mit einer haesslichen Kombination von Frickeleien :roll: Ich wandle dieses %u20AC-Dingens das ich vom Browser kriege in einen gueltigen String um. Landet zwar nicht ganz korrekt in der Datenbank, stoert mich zum jetztigen Zeitpunkt aber kein bisschen :roll: Hauptsache es funktioniert[/add]


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:25 Uhr.
Seite 3 von 3     123   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz