ingobar: AJAX: Umlaute abspeichern?

Beitrag lesen

Ersteinmal Danke für die ausfürhliche Antwort. Ich versuche jetzt noch einmal genau zu beschreiben was passiert.

Der User hat Eingabefelder (html-Datei mit <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1"> und als Latin1 im Texteditor gespeichert.) Durch Klick auf Specichern passiert folgendes:

1. Es wird die folgende Funktion aufgerufen:

var saveDB_ajax_anfrage = null;

function writeDB() {
 //var dbName = prompt("Unter welchem Namen soll die Datenbank gespeichert werden?");
 var dbName = "test";
 if (dbName) {
  saveDB_ajax_anfrage = null;
  saveDB_ajax_anfrage = erzeugeDB_Anfrage();

var url = "./php/writedb.php?";
  var data2send = "filename="+dbName;
  data2send += "&data="+escape(changeDataForExport());
  if (saveDB_ajax_anfrage!=null) {
   saveDB_ajax_anfrage.open("POST", url, true);
   saveDB_ajax_anfrage.onreadystatechange = zeigeBestaetigung_save_writeDB;
   saveDB_ajax_anfrage.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
   saveDB_ajax_anfrage.send(data2send);
  } else {
   alert("Es konnte keine Verbindung zum Server aufgebaut werden.");
  }
 }
}

2. In der ersten Funktion steht die Zeile data2send += "&data="+escape(changeDataForExport());

3. In der Zeile changeDataForExport() wird u.a. versucht die Umlaute zu erzeugen und anderen Daten in der mir gewünschten Art und Weise zusammenzustellen.

4. Das Ganze wird an folgende php-Datei geschickt:

function write_curData($filename,$data) {
 $today = date("Ymd_His");
        $filename = $filename.$today;
 }
 $dirName = "savedDBs";
 $file = "../".$dirName."/".$filename.".txt";

if (!$handle = fopen($file, "w")) {
  echo "Kann die Datei $file nicht öffnen";
  exit;
 }
 if (!fwrite($handle, $data)) {
  echo "Kann in die Datei $file nicht schreiben";
  exit;
 }

fclose($handle);

echo ("Erfolgreich geschrieben.");
}
write_curData($_POST['filename'],$_POST['data']);

5. Wenn der User die erzeugte Datei nun wieder laden will, kommt der Aufruf in dieser js-Datei an:
var readDB_ajax_anfrage = null;

function readDB(filename) {
 readDB_ajax_anfrage = null;
 readDB_ajax_anfrage = erzeugeDB_Anfrage();
 var url = "./php/readdb.php?";
 var data2send = "filename="+filename;
 if (readDB_ajax_anfrage!=null) {
  readDB_ajax_anfrage.open("POST", url, true);
  readDB_ajax_anfrage.onreadystatechange = zeigeBestaetigung_readDB;
  readDB_ajax_anfrage.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  readDB_ajax_anfrage.send(data2send);
 } else {
  alert("Es konnte keine Verbindung zum Server aufgebaut werden.");
 }
}

function zeigeBestaetigung_readDB(){
 if (readDB_ajax_anfrage.readyState == 4) {
    if (readDB_ajax_anfrage.status == 200) {
     var antwort = readDB_ajax_anfrage.responseText;
   var xmlAntwort = readDB_ajax_anfrage.responseXML;
   var splittedAntwort = antwort.split("\n");
    } else {
     var antwort = readDB_ajax_anfrage.responseText;
   alert("Fehler! Anfragestatus ist " + readDB_ajax_anfrage.status);
     }
   }
}

6. Die Datei readdb.php macht folgendes:

<?php
error_reporting(E_ALL);
//print_r ($_POST);

function read_DBdata($filename) {
 $resStr = "";
 $lines = file ($filename);
 foreach ($lines as $line_num => $line) {
  if ($line!="") {
   $resStr .=  $line;
  }
 }
 echo $resStr;
}

read_DBdata($_POST['filename']);
?>

7. Die empfangen Daten werden dann wieder dargestellt.

Hilft der ganze Code noch beim Helfen?