phil: utf8 Problem bei Ajax übertragung

Hi.

  
req2.open("POST","/pm/pushEntry/"+thetext,true);  
req2.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=utf-8");  
req2.send(null);  

Das sind die wichtigsten Zeilen.

Hierher kommt "thetext"

<textarea name='wand' id='wand'></textarea>  
<p><button onclick=\"return newWandEntry(document.getElementById('wand').value)\">Stecken!</button></p>

So, pushEntry($text) macht nun folgendes:
$insert=dbk::query("INSERT INTO mainproject.users_profilentrys (msg) VALUES('".dbk::escape($entry)."')");

und dbk::escape():

public static function escape($string){  
		return pg_escape_string(self::_getConnection(),utf8_encode($string));  
	}

Ich nutze PHP 5.3 und PostGreSQL.
Wenn ich ins Textfeld Zeilenumbrüche eingebe, werden diese nicht mit abgespeichert, wenn ich umlaute nehme wie ä,ö,ü oder Leerzeichen dann speichert er zwar ab, aber bricht das Skript ab.

Ich vermute das ich hier:
req2.open("POST","/pm/pushEntry/"+thetext,true);

bei "thetext" eine UTF8 Funktion oder so anwenden muss.

Die Spalte "msg" ist vom Typ text.
db::query ist einfach nur eine Methode die pg_query() ausführt.

Gruß, phil

  1. Hallo,

    »» req2.open("POST","/pm/pushEntry/"+thetext,true);  
    
    > req2.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=utf-8");  
    > req2.send(null);
    
    

    Das sind die wichtigsten Zeilen.

    glaube ich nicht; sie enthalten so gut wie keine Information.

    »» <textarea name='wand' id='wand'></textarea>  
    
    > <p><button onclick=\"return newWandEntry(document.getElementById('wand').value)\">Stecken!</button></p>
    
    

    Ah, schon besser.

    »» $insert=dbk::query("INSERT INTO mainproject.users_profilentrys (msg) VALUES('".dbk::escape($entry)."')");

    »» public static function escape($string){  
    
    > 		return pg_escape_string(self::_getConnection(),utf8_encode($string));  
    > 	}
    
    

    Was soll das utf8_encode() hier? Nach deiner obigen Behauptung bekommt der Server die Daten doch schon als UTF-8. Wenn du sie ein zweites Mal codierst, kommt Müll dabei raus.

    Wenn ich ins Textfeld Zeilenumbrüche eingebe, werden diese nicht mit abgespeichert

    Woran überprüfst du das? Hoffentlich nicht anhand der Ausgabe im Browser. Auf alle Fälle bin ich überzeugt, dass das nur ein Scheinproblem ist und mit dem Umlaut-Phänomen nichts zu tun hat.

    wenn ich umlaute nehme wie ä,ö,ü oder Leerzeichen dann speichert er zwar ab, aber bricht das Skript ab.

    In welcher Codierung liegt dein HTML-Dokument mit dem darin enthaltenen Javascript vor? In welcher Codierung unterhalten sich PHP und Datenbank? Welche Codierung hat die für diesen Text zuständige Spalte deiner Datenbank? Sobald ein Schritt in der Kette von UTF-8 abweicht, sind Pannen vorprogrammiert[sic!]. Und wenn selbst ein Leerzeichen Fehler produziert, hast du noch ein ganz anderes Problem, das ich anhand deiner Codefragmente aber nicht erkenne.

    So long,
     Martin

    --
    "Gestern habe ich die Rede des Parteivorsitzenden gehört. Zwei Stunden lang!" - "Worüber?" - "Hat er nicht gesagt."