kobold: [Ajax, PHP, JavaScript] Selbe Daten. Unterschiedlicher Empfang

Beitrag lesen

Hallo,
ich habe zur Zeit ein seltsames Problem in Verbindung mit Ajax und PHP. Und zwar gebe ich auf einer Seite Benutzername und Passwort ein. Dann werden beim Klick auf "Einloggen" die Daten zuerst per JavaScript (Ajax) an eine PHP Datei gesendet und danach nochmal ganz normal per POST, wenn das Ziel des Formulars geladen wird.
Die PHP Datei speichert dabei immer die empfangenen Daten in eine Datei. Es werden zusätzlich die Länge des Passworts und die MD5-Summe gespeichert.
Das ist der Code:
[html]<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de">

<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<script type="text/javascript" language="javascript">
<!--
 var http_request = false;

function checkInput() {
  http_request = false;
  if (window.XMLHttpRequest) { // Mozilla, Safari,...
   http_request = new XMLHttpRequest();
   if (http_request.overrideMimeType) {
    http_request.overrideMimeType('text/xml');
   }
  } else if (window.ActiveXObject) { // IE
   try {
    http_request = new ActiveXObject("Msxml2.XMLHTTP");
   } catch (e) {
    try {
     http_request = new ActiveXObject("Microsoft.XMLHTTP");
    } catch (e) {}
   }
  }

if (!http_request) {
   alert('Giving up :( Cannot create an XMLHTTP instance');
   return false;
  }

http_request.open('POST', 'test.php?ajax', false);
  http_request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;");

http_request.send("user="+encodeURIComponent(document.login.user.value)+"&pw="+encodeURIComponent(document.login.pw.value));
  alert(encodeURIComponent(document.login.user.value));
  alert(escape(document.login.user.value));
  while(http_request.status!=200 && http_request.readyState != 4) { }

if(http_request.responseText!="") {
   alert(unescape(http_request.responseText));
  }

//return (http_request.responseText=="");
  return true;
 }
//-->
</script>
</head>

<body>
<form name="login" onsubmit="return checkInput();" method="post" action="test.php">
 <label for="user">Benutzername: <input id="user" type="text" name="user" maxlength="40" /></label>&nbsp;&nbsp;
 <label for="pw">Passwort: <input id="pw" type="text" name="pw" maxlength="25" /></label>
 <input type="submit" value="Einloggen!" />
</form>
</body>

</html>[/html]

[b]test.php[/b]
[php]<?php

function demaskieren($string) {
  return (get_magic_quotes_gpc()) ? stripslashes($string) : $string;
 }

$user = (demaskieren($_POST['user']));
 $user .= "\r\n".demaskieren($_POST['pw']);
 $user .= "\r\n".md5(demaskieren($_POST['pw']));
 $user .= "\r\n".strlen(demaskieren($_POST['pw']));
 $user .= "\r\n".print_r($_POST, true);

$fp = false;
 if(isset($_GET['ajax']))
  $fp=fopen("userlogin_ajax.txt","w");
 else
  $fp=fopen("userlogin_post.txt","w");
 fwrite($fp,$user);
 fclose($fp);
?>[/php]

Ich benutze zum Testen folgende Werte: http://parastudios.de/quidoff/test/user.txt

Die entstehenden Dateien sehen so aus:
[u]userlogin_post.txt[/u]
http://parastudios.de/quidoff/test/userlogin_post.txt

[U]userlogin_ajax.txt[/U]
http://parastudios.de/quidoff/test/userlogin_ajax.txt

Wie zu sehen ist, ist das Array $_POST in beiden Fällen gleich. Trotzdem wird die Passwortlänge bei Ajax 4 Zeichen zu viel und auch die MD5 Summe falsch berechnet.

Woran liegt das?

Mir ist aufgefallen, dass die hochgeladenen Dateien unterschiedlich aussehen. Bei mir im Notepad sehen sie gleich aus. Sieht so aus, als hätte die Datei, die per Ajax erstellt wird, einen anderen Zeichensatz. Wie kann ich das ändern?