Delphi-PRAXiS

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 11:08


[PHP/JS] Unicode-Problem
 
So, nach erfolglosen zwei Stunden googeln (!) kapituliere ich nun endgueltig.

Ich lese in einem Form auf einer Website irgendwas ein, und schicke es dann mit Hilfe von JavaScript-Funktionen an ein php-Script (ja, wieder mal meine AJAX-Spielereien). Der String wird dabei vorher durch escape() gejagt. Nun ergibt sich folgendes Problem:
wenn ein Sonderzeichen enthalten ist (wie z.B. €), dann wird dieses korrekt in Unicode escapt: %u20AC. Allerdings sieht PHP dies als den String %u20AC an, und betrachtet es nicht als Unicode :(
Weiss jemand wie ich dieses Problem loesen kann? So langsam bringt es mich um meinen Verstand

Greetz
alcaeus

BenjaminH 14. Apr 2006 11:21

Re: [PHP/JS] Unicode-Problem
 
Hallo
vielleicht hilft utf8_encode oder das dazugehörige decode?
Grüße Benjamin

mkinzler 14. Apr 2006 11:22

Re: [PHP/JS] Unicode-Problem
 
Hallo alcaeus,

Sind alle Sonderzeichen betroffen oder funktioniert urldecode()/rawurldecode() nur bei manchen nicht?

xaromz 14. Apr 2006 11:27

Re: [PHP/JS] Unicode-Problem
 
Hallo,

noch ein Tipp: PHP unterstützt kein Unicode.

Gruß
xaromz

alcaeus 14. Apr 2006 11:43

Re: [PHP/JS] Unicode-Problem
 
Hallo,

Zitat:

Zitat von BenjaminH
vielleicht hilft utf8_encode oder das dazugehörige decode?

Habe ich soeben probiert, leider negativ :(

Zitat:

Zitat von mkinzler
Sind alle Sonderzeichen betroffen oder funktioniert urldecode()/rawurldecode() nur bei manchen nicht?

Es sind nur Unicode-Zeichen wie € betroffen. Andere Zeichen wie z.B. é werden normal erkannt. weder urldecode() noch rawurldecode() haben etwas daran geaendert.

Zitat:

Zitat von xaromz
noch ein Tipp: PHP unterstützt kein Unicode.

Hmm...wie sollte ich dann den Input von JS am Besten verarbeiten, bzw. codieren? Beim "normalen" Absenden des Formulars klappt es ja, es haengt nur wenn ich das Ganze ueber den AJAX-Schnellweg erledige :gruebel:

Greetz
alcaeus

DGL-luke 14. Apr 2006 14:06

Re: [PHP/JS] Unicode-Problem
 
Eventuell wirst du selbst parsen müssen.

Das sollte mit preg_replace in Verbindung mit dem Modifier e oder mit preg_replace_callback und einer Ersetzungstabelle sogar recht elegant gehen.

Echte Unicode-Ausgabe geht dann wohl mit den utf8-Funktionen :gruebel:

alcaeus 14. Apr 2006 14:08

Re: [PHP/JS] Unicode-Problem
 
Ja, also eines habe ich bereits festgestellt:
die utf-8-Codierung von JS ist alles andere als richtig. Mit dieser Funktion schreibe ich mir das eben in Zeichen um:
Code:
function ajax_decode_formvars($var)
{
   return preg_replace('#%u([a-f0-9]{4,4})#ie', 'utf8_decode(\'&#x\\1;\')', $var);
}
Nur bleibt dann eben der Code (beim €-Zeichen eben €) im String liegen, und nicht das Euro-Zeichen selbst. Woran das liegt habe ich noch nicht rausgefunden und das Problem momentan beiseite gelegt (bis morgen eben....)
Falls jemand weitere Tipps hat, nur her damit, ich wuesste nicht wo ich ansetzen sollte :(

Greetz
alcaeus

DGL-luke 14. Apr 2006 14:18

Re: [PHP/JS] Unicode-Problem
 
Der Euro ist ja #128, also das erste Zeichen im erweiterten Zeichensatz. Das kommt mir sowieso komisch vor, ich glaube, da hat Microsoft auch was getürkt. (Nein, das ist kein MS-Bashing :roll:)

Was ist denn € für ein Index in welcher Tabelle?

Konvertiert UTF8_decode evtl. nur das Low-Set? (du könntest es ja mal mit © / #169 oder ®/#174 versuchen)

Frickeldrecktuxer_TM 14. Apr 2006 15:03

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

Zitat von DGL-luke
Der Euro ist ja #128

In irgendeinem kranken Windows-Zeichensatz vielleicht, aber nicht in Unicode. Da ist es 0x20AC, und das ist das, was alcaeus oben auch schon hatte.

Zitat:

Zitat von DGL-Luke
Das kommt mir sowieso komisch vor, ich glaube, da hat Microsoft auch was getürkt.

Ja, haben sie. Die machen mit ihrem Zeichensatz (Windows-*) seit jeher, was sie wollen.

Zitat:

Zitat von DGL-Luke
Was ist denn € für ein Index in welcher Tabelle?

"€".

Zitat:

Zitat von DGL_Luke
Konvertiert UTF8_decode evtl. nur das Low-Set?

Dann wäre es kein UTF8_*code().
UTF8_(en)code() konvertiert zwischen ISO-8859-1 und UTF-8 hin und her. Wenn Das Eurozeichen bei dir 0x80 ist, benutzt du weder Unicode, noch ISO-8895-1, sondern irgendwelchen proprietären Müll (Windows-1252) und guckst damit in die Röhre.
Wenn in einem String die Zeichenfolge "%u20AC" auftaucht, ist das kein UTF-8, mit irgendwelchen Standard-Unicode-Schnickschnack-Funktionen wirst du da nicht weit kommen. "%u20AC" ist kein Zeichensatz oder eine Zeichenkodierung, sondern ein Mapping, genauer ein Escape-Sequenz, die Word-Zeichen (in dem Fall wohl UTF-16) auf Byte-Zeichensätze abbildet. Laut Dokumentation kommt die Funktion urldecode() nur mit %xx zurecht, also Byte-Zeichen, keine Word-Zeichen. Was du suchst ist eine Funktion, die UTF-16 in einen für PHP brauchbaren Zeichensatz umwandelt, oder eine Funktion die UTF-16-Strings in UTF-8-Strings transformiert (das ginge theoretisch auch in JavaScript, kommt drauf an, für was man einfacher eine fertige Funktion findet). Die UTF-(-Transformation findet sich im Unicode-Standard. Das Euro-Zeichen wäre Beispielsweise in UTF-8als 0xE282AC kodiert.

alcaeus 14. Apr 2006 15:10

Re: [PHP/JS] Unicode-Problem
 
Hallo frickeldingens (*g*),

ja, diese Funktion hab ich, und diese sieht eben wie folgt aus:
Code:
function ajax_decode_formvars($var)
{
   return preg_replace('#%u([a-f0-9]{4,4})#ie', 'utf8_decode(\'&#x\\1;\');', $var);
}
Dies funktioniert auch auf einer Testseite:

Code:
if (isset($_GET['c']))
{
   echo $_GET['c'] .'
';
   echo ajax_decode_formvars($_GET['c']) .'
';
}
gibt mir anstandslos das €-Zeichen aus, sobald ich %u20ac als Parameter beim Seitenaufruf mitgebe (das Charset der Seite ist auf utf-8 gesetzt). Trotzdem funktioniert es im phpBB-Forum (diese AJAX-Spielereien sind eine Erweiterung dafuer) nicht.
Dies haengt entweder damit zusammen, dass irgendwo ein htmlspecialchars() zuviel daherkommt (es steht naemlich € drin), oder dass es einfach daran liegt, dass das XML-File, ueber das das Ergebnis zum Browser kommt als charset utf-8 eingestellt hat, die Seite, auf der angezeigt wird allerdings ISO-8859-1. Was genau es ist muss ich jetzt mal rausfinden :roll:
Das Problem ist sozusagen "halbgeloest", irgendwo steckt der Wurm noch, aber wo, das muss ich erst rausfinden. Jedenfalls schon mal Danke fuer eure Hilfe :)

Greetz
alcaeus

alcaeus 14. Apr 2006 16:29

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

Zitat von alcaeus
Das Problem ist sozusagen "halbgeloest"

Oder auch nicht :(

Ich beschreibe jetzt nochmal genauer, was ich bis jetzt rausgefunden habe, und hoffe mal dass mir jemand weiterhelfen kann.

Ich habe bei einem Posting-Formular zwei Wege um es abzuschicken: einmal ueber AJAX, einmal ueber den "normalen" submit.
Die Seite um die es dabei geht, hat ISO-8859-1 als charset eingestellt; dies nur so als Information.

Wenn ich das Formular ueber AJAX absende, dann wird der Wert der textarea genommen und durch escape() gejagt. Dies macht aus '€' ein '%u20AC'. Anschliessend wird es per XMLHttpRequest-Objekt an den Server gesendet, und zwar mit Content-Type "application/x-www-form-urlencoded". Im PHP-Script nehme ich den String der reinkommt und jage ihn durch oben gepostete Funktion, der eigentlich dieses falsche JS-encodierte Unicode-Zeichen umwandeln sollte. Da kommt allerdings trotz utf8_decode() nur '€' raus, und das landet auch in der Datenbank.
Wenn ich das Formular hingegen ueber den ueblichen Weg absende, so kommt auch ein € beim PHP-Script an, dort muss ich nichts machen.

Und das stellt mich vor ein Raetsel: trotz utf8_decode() kriege ich nicht das richtige Zeichen raus; und natuerlich landet es deshalb auch falsch in der Datenbank.

Kann mir jemand einen Tipp geben? Ich steh ichgendwie voll aufm Schlauch :cry:

Greetz
alcaeus

Frickeldrecktuxer_TM 14. Apr 2006 17:30

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

Zitat von Frickeldrecktuxer_TM
Wenn in einem String die Zeichenfolge "%u20AC" auftaucht, ist das kein UTF-8, mit irgendwelchen Standard-Unicode-Schnickschnack-Funktionen wirst du da nicht weit kommen. "%u20AC" ist kein Zeichensatz oder eine Zeichenkodierung, sondern ein Mapping, genauer ein Escape-Sequenz, die Word-Zeichen (in dem Fall wohl UTF-16) auf Byte-Zeichensätze abbildet. Laut Dokumentation kommt die Funktion urldecode() nur mit %xx zurecht, also Byte-Zeichen, keine Word-Zeichen. Was du suchst ist eine Funktion, die UTF-16 in einen für PHP brauchbaren Zeichensatz umwandelt, oder eine Funktion die UTF-16-Strings in UTF-8-Strings transformiert (das ginge theoretisch auch in JavaScript, kommt drauf an, für was man einfacher eine fertige Funktion findet). Die UTF-(-Transformation findet sich im Unicode-Standard. Das Euro-Zeichen wäre Beispielsweise in UTF-8als 0xE282AC kodiert.

Ich weiß nicht, was du da mit dem Kaufmannsund und UTF8_decode() machst...

Der Fehler liegt hier auf der Seite eines kranken Mappings von JavaScript, da sollte man reparieren. Laut SelfHTML (http://de.selfhtml.org/javascript/ob...gig.htm#escape) sollte dein encode() ohnehin nur für ASCII-Zeichen funktionieren, daß er dir beim Euro-Zeichen überhaupt was ausgibt ist bereits (zumindest laut SelfHTML, es wird vielleicht irgendwo eine aktuellere Dokumentation geben) undefiniertes Verhalten. Das Beispiel zu encodeURI() sieht ganz brauchbar aus, oder besser: es verhält sich für den Beispielstring so, wie ich es erwarte (in einem Firefox 1.5 in einer UTF-8-Umgebung).

Flocke 14. Apr 2006 17:43

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

Zitat von alcaeus
Code:
function ajax_decode_formvars($var)
{
   return preg_replace('#%u([a-f0-9]{4,4})#ie', 'utf8_decode(\'&#x\\1;\');', $var);
}

Der Aufruf "utf8_decode(\'&#x\\1;\');" konvertiert nicht wirklich etwas, denn die Eingabe ist ja kein UTF8.

Du hast den UTF16-Hexadezimalcode (20AC) und musst das nach UTF8 "\xE2\x82\xAC" konvertieren. Muss man sich jetzt nur noch die Konvertierungsregeln ansehen (siehe unten) und eine entsprechende Routine schreiben, die statt utf8_decode aufgerufen wird.
Code:
U-00000000 - U-0000007F: 0xxxxxxx
U-00000080 - U-000007FF: 110xxxxx 10xxxxxx
U-00000800 - U-0000FFFF: 1110xxxx 10xxxxxx 10xxxxxx
U-00010000 - U-001FFFFF: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
U-00200000 - U-03FFFFFF: 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
U-04000000 - U-7FFFFFFF: 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

Frickeldrecktuxer_TM 14. Apr 2006 17:54

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

Zitat von Flocke
Du hast den UTF16-Hexadezimalcode (20AC)

Es kommt im Endeffekt aufs gleiche raus, aber es ist einfach die Unicode-Repräsentierung als Hexadezimalzahl ausgeschrieben, kein UTF-16 (sondern UCS ;-)).
Hätte die escape()-Funktion UTF-16 erzeugen wollen, würde nicht einfach die Hexadezimalzahl im String stehen (es sei denn die Implementierung ist sehr kaputt).
Ist zwar nur eine reine Formalität und ändert am Ergebnis nichts, aber soll doch zumindest mal erwähnt bleiben, wenn hier schon so viel Verwirrung um Zeichensätze und Zeichenkodierungen herrscht.

Ansonsten ist das ja genau das, was ich schon in meinem ersten Post geschrieben habe :zwinker:

alcaeus 14. Apr 2006 17:59

Re: [PHP/JS] Unicode-Problem
 
Ok, ich werde heute Abend noch mit encodeURI() sowie ein paar anderen Dingen herumspielen, und dann Bescheid sagen, obs auch funktioniert hat ;)

Danke fuer die Hilfe :)

Greetz
alcaeus

Flocke 14. Apr 2006 18:29

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

Zitat von Frickeldrecktuxer_TM
... aber soll doch zumindest mal erwähnt bleiben, wenn hier schon so viel Verwirrung um Zeichensätze und Zeichenkodierungen herrscht.

Recht hast du, mein Fehler.

Zurück zum Thema: so sollte es gehen:
Code:
function hex2utf8($str)
{
   $i = hexdec($str);
   if ($i < 0x80)
      return chr($i);

   $r = '';
   for ($x = 0x3f; $i > $x; $x >>= 1)
   {
      $r = chr(0x80 + ($i & 0x3f)) . $r;
      $i >>= 6;
   }

   return chr(0xfe - $x - $x + $i) . $r;
}

$str = preg_replace('#%u([a-f0-9]{4,4})#ie', 'hex2utf8(\'\1\');', $str);

alcaeus 14. Apr 2006 21:22

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

Zitat von Frickeldrecktuxer_TM
Das Beispiel zu encodeURI() sieht ganz brauchbar aus, oder besser: es verhält sich für den Beispielstring so, wie ich es erwarte (in einem Firefox 1.5 in einer UTF-8-Umgebung).

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

@Flocke: Deine Routine funktioniert so ungefaehr; In der XML-Datei sieht es teilweise richtig aus, in der Datenbank allerdings nicht wirklich :gruebel:

Ich werde aber nch ein bisschen damit rumspielen.

Greetz
alcaeus

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

Frickeldrecktuxer_TM 14. Apr 2006 21:35

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 UTF-8 mit Scaping. Jetzt brauchst du lediglich ein urldecode(), in dem das utf8_decode() schon integriert ist. Wie xaromz schon richtig bemerkte, die String-Funktionen von PHP sind nicht für UTF ausgelegt. Entweder Unicode, oder Escaping, beides gleichzeitig wird ziemlich ekelhaft. Aber jetzt hast du wenigstens etwas standardkonformes und nicht irgendwelchen zusammengefrickelten Müll, jetzt sollte es einfacher sein, eine fertige Funktion dafür zu finden.

alcaeus 14. Apr 2006 21:41

Re: [PHP/JS] Unicode-Problem
 
Ok...also:
ich jage die Zeichen jetzt durch encodeURI() anstatt escape()
Sobald die Daten beim Server ankommen, lasse ich ein urldecode() drueberlaufen. Anschliessend wird der Rueckgabewert gespeichert und zur Kontrolle an den Client zurueckgeschickt. Dort sehe ich ein Euro-Zeichen. In der Datenbank landet aber die Kombination "€" fuer €, und "é" fuer é (zweiteres wurde bei escape() korrekt eingetragen). Also so langsam verliere ich komplett den Ueberblick :roteyes:

Greetz
alcaeus

Frickeldrecktuxer_TM 14. Apr 2006 22:00

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

Zitat von alcaeus
In der Datenbank landet aber die Kombination "€" fuer €, und "é" fuer é (zweiteres wurde bei escape() korrekt eingetragen).

Ich habe jetzt nicht nach den Werten gesucht, aber é ist UTF-8-kodiert ebenfalls ein Zwei-Byte-Zeichen, weil es nicht im ASCII-Zeichensatz enthalten ist. Wenn die Zahlwerte stimmen ist es also erwartetes Verhalten.
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?

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 07:18 Uhr.

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