mmofacts.com

Javascript Umlaute

gepostet vor 15 Jahre, 9 Monate von force4

Guten Abend zusammen,

ich habe folgendes Problem:

Ich lade auf einer Seite ein JSON-enkodiertes Array mittels AJAX nach. Dieses Array enthält unter anderem Strings, in denen auch Umlaute in der Form ü, ä, ... vorkommen.

Wenn ich jedoch nachträglich Inhalt aus diesem Array ins DOM nachlade, dann werden diese Umlaute nicht konvertiert sondern "so wie sie sind" eingefügt - also statt ü wird ü ausgegeben.

Gibt es eine JS-interne Funktion, um sowas umzuwandeln, oder mache ich etwas falsch?

gepostet vor 15 Jahre, 9 Monate von Redrick

hast du mal schnell die code-auschnitte, wo du JSON mit den Zeichen  bestückst und die stelle wo die übertragung zurück ins HTML erfolgt? IMHO ist "&" ein escape-pflichtiges  zeichen

gepostet vor 15 Jahre, 9 Monate von force4

Hallo,

ich habe ein Array (im PHP-Source), welches mittels json_encode() enkodiert wird.

Der entsprechende Ausschnitt im JS-Teil ist folgender:

JavaScript:

var json = response.evalJSON();

(...Schleife...)

td_action.appendChild(document.createTextNode((json[i].actions)));

json[i].actions enthält die erwähnten Umlaute.

gepostet vor 15 Jahre, 9 Monate von Redrick

ich vermute createTextNode benutzt CDATA für den inhalt so dass dein steuerzeichen flöten geht

1. was spricht gegen utf8?

2. was spricht gegen td_action.innerHTML += json[i].actions


gepostet vor 15 Jahre, 9 Monate von force4

Auf die innerHTML-Variante bin ich überhaupt nicht gekommen - vielen Dank!

gepostet vor 15 Jahre, 9 Monate von TheUndeadable

> Auf die innerHTML-Variante bin ich überhaupt nicht gekommen - vielen Dank!

Achte hier bitte aber auf mögliche XSS-Einfallstore. Ergo: Filter die Daten nach eventuellen Tags.

gepostet vor 15 Jahre, 9 Monate von force4

Natürlich wird das alles vorher gefiltert :-)

gepostet vor 15 Jahre, 9 Monate von Biki

So ein Problem hatte ich vorhin in etwa auch. Im PHP-Code habe ich "ä" eingegeben und nach dem encoden, versenden und decoden von JS kam "NULL" heraus.

Lösung war:

PHP:

// Vorher:
$text[] = "ä";
$data = json_encode($text);
// Nacher:
$text[] = utf8_encode("ä");
$data = json_encode($text);

Also den Kram einfach noch per utf8_encode richtig "umwandeln" und dann weiterschicken.

gepostet vor 15 Jahre, 9 Monate von rami95

Original von Biki

So ein Problem hatte ich vorhin in etwa auch. Im PHP-Code habe ich "ä" eingegeben und nach dem encoden, versenden und decoden von JS kam "NULL" heraus.

Lösung war:

PHP:

// Vorher:
$text[] = "ä";
$data = json_encode($text);
// Nacher:
$text[] = utf8_encode("ä");
$data = json_encode($text);

Also den Kram einfach noch per utf8_encode richtig "umwandeln" und dann weiterschicken.

 Nächstes Mal die PHP-Datei einfach utf-8 abspeichern?

gepostet vor 15 Jahre, 9 Monate von force4

Original von rami95

Original von Biki

So ein Problem hatte ich vorhin in etwa auch. Im PHP-Code habe ich "ä" eingegeben und nach dem encoden, versenden und decoden von JS kam "NULL" heraus.

Lösung war:

PHP:

// Vorher:
$text[] = "ä";
$data = json_encode($text);
// Nacher:
$text[] = utf8_encode("ä");
$data = json_encode($text);

Also den Kram einfach noch per utf8_encode richtig "umwandeln" und dann weiterschicken.

 Nächstes Mal die PHP-Datei einfach utf-8 abspeichern?

Vielleicht war das ja User-Generated-Content :)

gepostet vor 15 Jahre, 9 Monate von TheUndeadable

> Vielleicht war das ja User-Generated-Content :)

Auch dann kann die Website unter UTF-8 laufen (OK, vielleicht nicht auf PHP)

gepostet vor 15 Jahre, 9 Monate von Fornax

Original von rami95

 Nächstes Mal die PHP-Datei einfach utf-8 abspeichern?

Ich warte immernoch auf PHP 6, damit das gescheit geht und nicht schon bei includes scheitert...

gepostet vor 15 Jahre, 9 Monate von TheUndeadable

> Ich warte immernoch auf PHP 6, damit das gescheit geht und nicht schon bei includes scheitert...

Einfach ohne den UTF-8-'Prolog' oder wie er heißt speichern.

Dann klappt es auch in PHP 5.

gepostet vor 15 Jahre, 9 Monate von MarcusSchwarz

Dafür dass du PHP dermaßen verteufelst hast du aber richtig Ahnung davon ;)

Ja, das ist richtig, UTF-8-Dateien für PHP müssen ohne BOM gespeichert werden. Eine IDE für PHP sollte das automatisch so speichern, bei anderen Editoren musst du halt mal nach der entsprechenden Option suchen.

gepostet vor 15 Jahre, 9 Monate von knalli

Allerdings.. es geht auch ohne. Persönlich/private speichere ich auch PHP grundsätzlich in UTF-8 ab (ich weiß ja, was ein BOM Ist). Aber in dem CMS-System, wo ich nebenbei mitarbeiten ist die Vorgabe, alles nur ASCII zu speichern. Da die Sprache de facto nur englisch ist und Benutzereingaben in den Scripten keinen Platz haben, kommt man mit Nicht-ASCII-Zeichen dort gar nicht in Berührung. Benutzereingaben werden beim Speichern und Laden ggf. automatisch kodiert/dekodiert.

Will heißen: Sofern man die Wege von A (Input) nach B (DB) und wieder B nach A (Output, Charset) richtig definiert und einhält, kann man die PHP-Datei eigentlich speichern wie man will.

gepostet vor 15 Jahre, 8 Monate von Tron

Original von MarcusSchwarz

Dafür dass du PHP dermaßen verteufelst hast du aber richtig Ahnung davon ;)

Er verteufelt PHP WEIL er Ahnung davon hat ;) Verteufeln ohne Ahnung müsste man ja nicht ernst nehmen ;)

Sorry für den OT, aber ich konnte nicht widerstehen ;)

Saludos, Stefan

gepostet vor 15 Jahre, 8 Monate von Kapsonfire

encodeURIcomponent

und

decodeURIcomponent

im Javascript Code jeweils haben mir sehr bei AJAX geholfen ;)

Auf diese Diskussion antworten