Delphi-PRAXiS
Seite 1 von 3  1 23      

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


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:51 Uhr.
Seite 1 von 3  1 23      

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