![]() |
Re: [PHP/JS] Unicode-Problem
Zitat:
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 |
Re: [PHP/JS] Unicode-Problem
Zitat:
Der Fehler liegt hier auf der Seite eines kranken Mappings von JavaScript, da sollte man reparieren. Laut SelfHTML ( ![]() |
Re: [PHP/JS] Unicode-Problem
Zitat:
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 |
Re: [PHP/JS] Unicode-Problem
Zitat:
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: |
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 |
Re: [PHP/JS] Unicode-Problem
Zitat:
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); |
Re: [PHP/JS] Unicode-Problem
Zitat:
@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: |
Re: [PHP/JS] Unicode-Problem
Zitat:
|
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 |
Re: [PHP/JS] Unicode-Problem
Zitat:
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? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:06 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz