AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

[PHP/JS] Unicode-Problem

Ein Thema von alcaeus · begonnen am 14. Apr 2006 · letzter Beitrag vom 18. Apr 2006
Antwort Antwort
Seite 1 von 3  1 23      
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#1

[PHP/JS] Unicode-Problem

  Alt 14. Apr 2006, 12:08
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
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
BenjaminH

Registriert seit: 14. Okt 2004
Ort: Freiburg im Breisgau
713 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: [PHP/JS] Unicode-Problem

  Alt 14. Apr 2006, 12:21
Hallo
vielleicht hilft utf8_encode oder das dazugehörige decode?
Grüße Benjamin
Benjamin
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: [PHP/JS] Unicode-Problem

  Alt 14. Apr 2006, 12:22
Hallo alcaeus,

Sind alle Sonderzeichen betroffen oder funktioniert urldecode()/rawurldecode() nur bei manchen nicht?
Markus Kinzler
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#4

Re: [PHP/JS] Unicode-Problem

  Alt 14. Apr 2006, 12:27
Hallo,

noch ein Tipp: PHP unterstützt kein Unicode.

Gruß
xaromz
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#5

Re: [PHP/JS] Unicode-Problem

  Alt 14. Apr 2006, 12:43
Hallo,

Zitat von BenjaminH:
vielleicht hilft utf8_encode oder das dazugehörige decode?
Habe ich soeben probiert, leider negativ

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 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

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#6

Re: [PHP/JS] Unicode-Problem

  Alt 14. Apr 2006, 15:06
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
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#7

Re: [PHP/JS] Unicode-Problem

  Alt 14. Apr 2006, 15:08
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 &#x20ac 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
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#8

Re: [PHP/JS] Unicode-Problem

  Alt 14. Apr 2006, 15:18
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 )

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)
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Frickeldrecktuxer_TM
(Gast)

n/a Beiträge
 
#9

Re: [PHP/JS] Unicode-Problem

  Alt 14. Apr 2006, 16:03
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 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 von DGL-Luke:
Was ist denn € für ein Index in welcher Tabelle?
"€".

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.
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#10

Re: [PHP/JS] Unicode-Problem

  Alt 14. Apr 2006, 16:10
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
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
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:50 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