![]() |
[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 |
Re: [PHP/JS] Unicode-Problem
|
Re: [PHP/JS] Unicode-Problem
Hallo alcaeus,
Sind alle Sonderzeichen betroffen oder funktioniert urldecode()/rawurldecode() nur bei manchen nicht? |
Re: [PHP/JS] Unicode-Problem
Hallo,
noch ein Tipp: PHP unterstützt kein Unicode. Gruß xaromz |
Re: [PHP/JS] Unicode-Problem
Hallo,
Zitat:
Zitat:
Zitat:
Greetz alcaeus |
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: |
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:
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....)
function ajax_decode_formvars($var)
{ return preg_replace('#%u([a-f0-9]{4,4})#ie', 'utf8_decode(\'&#x\\1;\')', $var); } Falls jemand weitere Tipps hat, nur her damit, ich wuesste nicht wo ich ansetzen sollte :( Greetz alcaeus |
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) |
Re: [PHP/JS] Unicode-Problem
Zitat:
Zitat:
Zitat:
Zitat:
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. |
Re: [PHP/JS] Unicode-Problem
Hallo frickeldingens (*g*),
ja, diese Funktion hab ich, und diese sieht eben wie folgt aus:
Code:
Dies funktioniert auch auf einer Testseite:
function ajax_decode_formvars($var)
{ return preg_replace('#%u([a-f0-9]{4,4})#ie', 'utf8_decode(\'&#x\\1;\');', $var); }
Code:
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.
if (isset($_GET['c']))
{ echo $_GET['c'] .' '; echo ajax_decode_formvars($_GET['c']) .' '; } 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 06:01 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