Der Martin: Javascript -> PHP -> MySQL: Umlautproblem

Beitrag lesen

Hallo,

HIIIIIIIIIIIIIIIIILFEEEEEEEEE!!  ;-)

schrei hier bitte nicht so rum, vielleicht möchte mancher noch ein wenig länger schlafen!

  1. In einem utf8-HTML-input-Element (id="label01") ist eingetragen "Tröte" (klar, ohne Anf.-Zeichen)

Das HTML-Dokument
 a) wird vom Server im HTTP-Header als UTF-8 gekennzeichnet?
 b) ist auch tatsächlich in UTF-8 codiert?

  1. JS-Funktion:

label = document.getElementById('label01').value;

url = "speichern.php?label=" + label;
window.open(url,'test');

  
Javascript arbeitet intern immer mit Unicode, hier dürfte noch kein Problem entstehen. Aber wenn die Ausgabe hier richtig aussieht, deutet das immerhin darauf hin, dass die tatsächliche Codierung des Dokuments zur angeblichen passt.  
  

> 3. speichern.php:  
> ~~~php

$label = $_GET['label'];  

> $labelEscaped = mysql_real_escape_string($label);  
> mysql_connect(SERVER, USER, PASS);  
> mysql_select_db(DB);  
> mysql_query("SET NAMES 'utf8'");  
> $sql = "update tabelle set label='$labelEscaped' where id='1'; // der DS existiert

Wird diesem Script der Text auch in UTF-8 übergeben?

Ergebnis im Datensatz: label = 'Tr', 'öte' fehlt.

Ich vermute also: Nein. Ich vermute, das 'ö' wird als ISO-8859-x-codiertes Zeichen übergeben (also als 0xFC). Wenn in einem UTF-8-String ein 0xFC auftaucht, bedeutet das aber, dass noch drei folgende Bytes zum gleichen Zeichen gehören. Da kommen aber nur noch zwei, nämlich 0x74='t' und 0x65='e'.

Testausgaben:
a) echo $label ergibt 'Tröte'
b) echo $sql ergibt "update tabelle set label='Tröte' where id='1'"
c) Die URL des Popup-Fensters zeigt: "http://...speichern.php?label=Tröte"

Wichtiger als die Ausgabe ist in dem Fall die Info, wie das 'ö' an den jeweiligen Stellen codiert ist.

Hat mal einer einen Tipp oder kann mir gleich sagen, was ich übersehen bzw. falsch gemacht habe?

Need more input. ;-)

Ciao,
 Martin

--
F: Was ist schneller: Das Licht oder der Schall?
A: Offensichtlich der Schall. Wenn man den Fernseher einschaltet, kommt immer erst der Ton, und dann erst das Bild.