falsches charset bei javascript?!

alaninalanin

Mitglied
Hallo,

ich habe eine Erweiterung für ein Forum geschrieben, welches ich geschrieben hab. Und zwar wird beim klicken auf einen bestimmten Link ein Formular eingeblendet, mit dem man einen Eintrag ändern kann.

Das ganze hab ich mit AJAX gemacht.

Allerdings habe ich ein Problem dabei, im Safari (Mac) funktioniert alles wunderbar.

Der Firefox (Win & Mac) und der IE (Win) geben mir in dem erscheinenden Formularfeld weder Umlaute noch Zeilenumbrüche an. Beim Absenden wird dann das "falsche" in die Datenbank eingetragen.

Wenn ich um die Ausgabe einfach komplett <textarea>$text</textarea> mache, ist alles in allen Browsern wunderbar. Es liegt also meines Wissens nach an dem JavaScript, dass ich verwende.

Ich bin echt verzweifelt. Habe schon alles mögliche probiert, was mir so einfiel.
Danke Jörg

Code:
<script type="text/JavaScript">
<!--
function createRequestObject() {
    var ro;
    var browser = navigator.appName;
    if(browser == "Microsoft Internet Explorer"){
        ro = new ActiveXObject("Microsoft.XMLHTTP");
    }else{
        ro = new XMLHttpRequest();
    }
    return ro;
}

var http = createRequestObject();

function post_read(action,pid) {
    http.open('get', 'include/ajax_forum.php?action='+action+'&pid='+pid);
    http.onreadystatechange = handleResponse;
    http.send(null);
}
function post_save() {
    http.open('post', 'include/ajax_forum.php?action='+document.post.action.value+'&pid='+document.post.pid.value+'&text='+document.post.text.value);
    http.onreadystatechange = handleResponse;
    http.send(null);
}

function handleResponse() {
    if(http.readyState == 4){
        var response = http.responseText;
        var update = new Array();

        if(response.indexOf('|' != -1)) {
            update = response.split('|');
            document.getElementById(update[0]).innerHTML = update[1];
        }
    }
}
//-->
</script>

bzw:
Code:
switch($action) {
	case 'read':
		if ( $sess[gruppe] != 'admin' ) $sql_query = db_query("SELECT * FROM forum_post WHERE pid = '$pid' AND mid = '$sess[mid]' LIMIT 1") or die(mysql_error());
		else $sql_query = db_query("SELECT * FROM forum_post WHERE pid = '$pid' LIMIT 1") or die(mysql_error());
		$anz = mysql_num_rows($sql_query);
		if ( $anz == '1' ):
			$item = mysql_fetch_array($sql_query);
				$text = $item[text];
				$text   = htmlspecialchars($text);
			echo "forum_$pid|<form action=\"\" name=\"post\" onsubmit=\"javascript:post_save(); return false;\" method=\"post\">
					<input type=\"hidden\" name=\"action\" value=\"save\">
					<input type=\"hidden\" name=\"pid\" value=\"$pid\">
					<textarea name=\"text\">$text</textarea><br>
					<input type=\"submit\" value=\"Eintrag speichern\"></form>";
		else:
			echo "meldung_$pid|Du hast nicht die erforderlichen Rechte um diesen Artikel zu ver&auml;ndern.";
		endif;
		break;
	case 'save':
		$text = addslashes($text);
		if ( $sess[gruppe] != 'admin' ):			
			$ergebnis = db_query("UPDATE forum_post SET text = '$text' WHERE pid = '$pid' AND mid = '$sess[mid]'") or die(mysql_error());
		else:
			$ergebnis = db_query("UPDATE forum_post SET text = '$text' WHERE pid = '$pid'") or die(mysql_error());
		endif;
		$sql_query = db_query("SELECT * FROM forum_post WHERE pid = '$pid' LIMIT 1") or die(mysql_error());
		$item = mysql_fetch_array($sql_query);
		$temp = encode($item[text]);
		echo "forum_$pid|$temp";
		#echo "meldung_$pid|Der Eintrag wurde gespeichert.";
		break;
}
 
Ich glaube, es liegt weniger am Zeichensatz, sondern eher an der Übertragung der Daten...du solltest sie vorher URL-tauglich encodieren:
Code:
http.open('post', 'include/ajax_forum.php?action='+document.post.action.value+'&pid='+document.post.pid.value+'&text='+escape(document.post.text.value));
 
ok, das hat super geklappt. vielen danke dafür. jetzt funktionieren die zeilensprünge ohne problem.

allerdings werden die sonderzeichen immernoch in der textarea als fragezeichen angezeigt und wenn ich das formular absende, habe ich "%uFFFD" in der Datenbank stehen.

muss ich die vor dem übertragen des formulars auch noch irgendwie umwandeln?

bis hier her nochmals danke
Jörg
 

Neue Beiträge

Zurück