lösung-gesucht: utf-8 in IE und Firefox

Hi,
habe eine Livesearch programmiert, wobei mit Java nach jeder Eingabe Ergebnisse ausgegeben werden.
Damit die Umlaute korrekt ausgegeben werden, habe ich meine Datenbank (MySQL) und meine php und html Seite auf charset:UTF-8 umgestellt.
Außerdem erfolgt die Datenbankanfrage ebenfalls in UTF-8:
mysql_query('set character set utf8;');
Ich habe jetzt folgendes Problem:
Wenn ich in mein Input-Feld (Textbox) Text eingebe, funktioniert im Firefox alles perfekt (sprich Umlaute funktionieren), während im IE die Umlaute nicht richtig verarbeitet werden und daher die Suchergebnisse nicht stimmen.
Benutze ich jetzt utf8_encode für mein Suchwort:
utf8_encode($q)
ist es genau andersherum, das heißt im IE funktioniert die Suchabfrage mit Umlauten und im Firefox nicht.
Kann mir jemand dabei helfen, das Problem zu lösen?
Danke schön

  1. Hellihello

    hast du den HTTP-Header korrekt gesetzt? Auch den meta-Tag fürs encoding?

    Dank und Gruß,

    frankx

    --
    tryin to multitain  - Globus = Planet != Welt
    1. Hey,
      hab ja wie gesagt ne Livesearch programmiert. Dafür hab ich ein html, ein php und ein js Dokument.
      Im html habe ich folgenden Meta-Tag
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8 ">
      Im php
      header("Content-Type: text/html; charset=UTF-8");
      Den Http-Header weiß ich ehrlich gesagt nicht, wie ich den setzen soll (hab ich auch schon probiert, hat aber nich geklappt). Hier mal mein Ajax:

      var xmlHttp

      function settext(str){
       document.getElementById("textfield").value=str;
      }

      function showUser(str)
      {
      xmlHttp=GetXmlHttpObject()
      if (xmlHttp==null)
       {
       alert ("Browser does not support HTTP Request")
       return
       }
      var url="getuser.php"
      url=url+"?q="+str
      xmlHttp.onreadystatechange=stateChanged
      xmlHttp.open("GET",url,true)
      xmlHttp.send(null)
      }function stateChanged()
      {
      if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
       {
       document.getElementById("txtHint").innerHTML=xmlHttp.responseText
       }
      }

      function GetXmlHttpObject()
      {
      var xmlHttp=null;
      try
       {
       // Firefox, Opera 8.0+, Safari
       xmlHttp=new XMLHttpRequest();
       }
      catch (e)
       {
       //Internet Explorer
       try
        {
        xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
        }
       catch (e)
        {
        xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
        }
       }
      return xmlHttp;
      }

      Hoffe, jetzt alles ein bisschen besser erklärt zu haben.
      Schönen Gruß

      1. »»1 var url="getuser.php"
        »»2 url=url+"?q="+str
        »»3 xmlHttp.onreadystatechange=stateChanged
        »»4 xmlHttp.open("GET",url,true)
        »»5 xmlHttp.send(null)
        »»6 }
        »»7 function stateChanged()
        »»8 {
        »»9 if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
        »»10  {
        »»11  document.getElementById("txtHint").innerHTML=xmlHttp.responseText
        »»12  }
        »»13 }

        By the way, kann mir eventuell jemand erklären, warum ich die Zeile 3 brauche, die ja die Funktion stateChanged aufruft, die wiederum in txtHint den Antworttext von Ajax schreibt. Allerdings brauch ich den gar nicht (die MySQL-Resultate werden in der php verarbeitet) und der txtHint ist immer leer, ohne ihn funktionierts allerdings auch nicht! Aber warum?
        Danke schön

      2. echo $begrüßung;

        Im php
        header("Content-Type: text/html; charset=UTF-8");
        Den Http-Header weiß ich ehrlich gesagt nicht, wie ich den setzen soll

        Das hast du damit bereits getan.

        Hier mal mein Ajax:

        Ach, das erwähnst du hier einfach mal so nebenbei? Wenn die Daten darüber gesendet werden, ist das ein wesentlicher Bestandteil und als Fehlerquelle nicht auszuschließen.

        Hier muss ich mich zurückziehen und das Antworten den mit XMLHttpRequest besser vertrauten überlassen.

        echo "$verabschiedung $name";

  2. echo $begrüßung;

    Damit die Umlaute korrekt ausgegeben werden, habe ich meine Datenbank (MySQL) und meine php und html Seite auf charset:UTF-8 umgestellt.

    Beschreibe bitte genauer was du gemacht hast, damit man eventuelle Fehler erkennen kann.

    Außerdem erfolgt die Datenbankanfrage ebenfalls in UTF-8:
    mysql_query('set character set utf8;');

    Kannst du die Funktion mysql_set_charset() verwenden? Das wäre die eigentlich richtige Variante. Wenn dir diese Funktion nicht zur Verfügung steht, bleib bei der mysql_query-Variante. Jedoch:

    Kennst du den Unterschied zwischen SET NAMES und SET CHARACTER SET? Hast du dich bewusst für SET CHARACTER SET entschieden? Wenn nicht, nimm SET NAMES. Siehe: Connection Character Sets and Collations

    Benutze ich jetzt utf8_encode für mein Suchwort:
    utf8_encode($q)
    ist es genau andersherum, das heißt im IE funktioniert die Suchabfrage mit Umlauten und im Firefox nicht.

    Sieht so aus, als ob der IE ISO-8859-1 sendet. Du wirst irgendwas bei der Angabe der Kodierung nicht richtig gemacht haben.

    Kann mir jemand dabei helfen, das Problem zu lösen?

    Ja, wenn du genauere Informationen lieferst oder eine Seite online stellst, wo das Problem zu sehen ist.

    echo "$verabschiedung $name";