Hallo,
bitte nicht gleich schlagen, ich weiss das dieses Thema schon mehrfach behandelt wurde, aber trotz großer Recherche, sei es hier oder im www, finde ich keine funktionierende Lösung für mein Problem.
Das Problem:
Über eine Shoutbox, sollen Einträge in die DB (MySQL) geschrieben und anschließend die letzten 5 angezeigt werden. Dafür verwende ich Ajax, und im Prinzip läuft auch alles.
Lediglich manchmal kommt zu Problemen mit dem Zeichensatz. Dann werden statt der Umlaute Zeichen wie "¼Ä" angezeigt. Diese Zeichen landen genauso auch in der Datenbank.
Was mich nun aber wunderte ist das ein und der selbe User mal saubere Einträge erstellte, mal nicht. Also habe ich selber erstmal den Fehler bei mir in der Programmierung vermutet, und habe folgedes festgestellt:
Wenn ich eine Seite direkt aufrufe, also über die Adresszeile, dann bekomme ich keine Umlaute angezeigt. Surfe ich auf der Seite, dh. klicke ich auf einen Link, und sei es der für die Startseite, dann bekomme ich die Umlaute sauber angezeigt.
Seltsam.
Habe gestern ein paar Stunden nach Lösungen gesucht und probiert das Problem zu lösen, aber ohne erfolg.
Vielleicht könnt ihr mir weiterhelfen.
Hier der Quellcode:
Ajax-Teil:
Alles anzeigen
Die Datei set_sms.php
Alles anzeigen
Den Rest erspar ich mir, denn wenn ich mir an dieser Stelle den Wert von $sms anzeigen lassen bekomme ich schon keine Umlaute angezeigt. Also muss es vorher passieren...
Vielen Dank schon mal im Voraus für euren hilfreichen Vorschläge.
bitte nicht gleich schlagen, ich weiss das dieses Thema schon mehrfach behandelt wurde, aber trotz großer Recherche, sei es hier oder im www, finde ich keine funktionierende Lösung für mein Problem.
Das Problem:
Über eine Shoutbox, sollen Einträge in die DB (MySQL) geschrieben und anschließend die letzten 5 angezeigt werden. Dafür verwende ich Ajax, und im Prinzip läuft auch alles.
Lediglich manchmal kommt zu Problemen mit dem Zeichensatz. Dann werden statt der Umlaute Zeichen wie "¼Ä" angezeigt. Diese Zeichen landen genauso auch in der Datenbank.
Was mich nun aber wunderte ist das ein und der selbe User mal saubere Einträge erstellte, mal nicht. Also habe ich selber erstmal den Fehler bei mir in der Programmierung vermutet, und habe folgedes festgestellt:
Wenn ich eine Seite direkt aufrufe, also über die Adresszeile, dann bekomme ich keine Umlaute angezeigt. Surfe ich auf der Seite, dh. klicke ich auf einen Link, und sei es der für die Startseite, dann bekomme ich die Umlaute sauber angezeigt.
Seltsam.
Habe gestern ein paar Stunden nach Lösungen gesucht und probiert das Problem zu lösen, aber ohne erfolg.
Vielleicht könnt ihr mir weiterhelfen.
Hier der Quellcode:
Ajax-Teil:
Quellcode
- function check_box(){
- var sms = document.getElementById("sms_text").value;
- if ((sms.length > 160) || ((sms.length < 2) && (sms.length != 0))){
- alert("Textlänge ungültig");
- }
- else{
- var url="set_sms.php?sms="+sms;
- document.getElementById("sms_text").value = '';
- document.getElementById('showsms').innerHTML="SMS-Box wird aktualisiert.<br>Bitte warten!";
- //alert(url);
- xmlHttp=GetXmlHttpObject(stateChanged);
- xmlHttp.open("GET", url , true);
- xmlHttp.send(null);
- }
- }
- function stateChanged()
- {
- if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
- {
- document.getElementById("showsms").innerHTML=xmlHttp.responseText ;
- }
- }
- function GetXmlHttpObject(handler)
- {
- var objXmlHttp=null
- /*
- if (navigator.userAgent.indexOf("Opera")>=0)
- {
- alert("This example doesn't work in Opera")
- return
- }
- */
- if (navigator.userAgent.indexOf("MSIE")>=0)
- {
- var strName="Msxml2.XMLHTTP"
- if (navigator.appVersion.indexOf("MSIE 5.5")>=0)
- {
- strName="Microsoft.XMLHTTP"
- }
- try
- {
- objXmlHttp=new ActiveXObject(strName)
- objXmlHttp.onreadystatechange=handler
- return objXmlHttp
- }
- catch(e)
- {
- alert("Error. Scripting for ActiveX might be disabled")
- return
- }
- }
- if ((navigator.userAgent.indexOf("Mozilla")>=0) || (navigator.userAgent.indexOf("Opera")>=0))
- {
- objXmlHttp=new XMLHttpRequest()
- if (objXmlHttp.overrideMimeType) {
- objXmlHttp.overrideMimeType('text/html; charset=ISO-8859-1');
- }
- objXmlHttp.onload=handler
- objXmlHttp.onerror=handler
- return objXmlHttp
- }
- }
- </script>
Die Datei set_sms.php
Quellcode
- <?
- $header = "HTTP/1.0 200 OK\r\n";
- $header .= "Content-Type: text/html; charset=ISO-8859-1\r\n";
- $header .= "Cache-Control: no-store, no-cache, must-revalidate\r\n";
- $header .= "Cache-Control: post-check=0, pre-check=0\r\n";
- $header .= "Pragma: no-cache\r\n";
- $header .= "Content-Transfer-Encoding: 8bit\r\n\r\n";
- header($header);
- require 'connect.php';
- if ($HTTP_GET_VARS['sms'])
- $sms = $HTTP_GET_VARS['sms'];
- ...
Den Rest erspar ich mir, denn wenn ich mir an dieser Stelle den Wert von $sms anzeigen lassen bekomme ich schon keine Umlaute angezeigt. Also muss es vorher passieren...
Vielen Dank schon mal im Voraus für euren hilfreichen Vorschläge.