Nachdem ich hier heute schon eine Frage gestellt habe und mir geraten wurde, das ganze anders anzugehen, habe ich alles neu überarbeitet. Jetzt bin ich auf neue Probleme gestoßen. Hier mein Quelltext, ich habe ihn auskommentiert.
<!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">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Text-Encode</title>
</head>
<body>
<?php
//Header://
error_reporting(E_ALL);
//Ein einzelnes Zeichen wird eingegeben:
$string = htmlentities($_GET['textfeld'], ENT_QUOTES); //kodiert Umlaute und Sonderzeichen in mehrere gültige Zeichen
echo $string."<br />\n"; //zeigt die codierten Zeichen (mehrere)
echo html_entity_decode($string, ENT_QUOTES)."<br />\n"; //zeigt das Originalzeichen (eines)
for ($i = 0; $i < strlen($string); $i++) { //gibt immer ein Zeichen (der codierten Zeichen) nach dem anderen aus
$x = ord ( $string ); //gibt den ASCII Wert des Zeichens aus
echo $x."<br />\n";
if ($x < 64) { //wegen der htmlentities gibt es nur mehr Zeichen mit einem Wert < 128
$z = sprintf ( '%b', $x ); //gibt den ASCII Wert als Binärcode aus
echo '00'.$z."<br />\n"; //fügt vorne zwei Nullen an, um den Binärcode auf 8-bit zu bringen
} else {
$z = sprintf ( '%b', $x );
echo '0'.$z."<br />\n"; //fügt eine Null an, um den Binärcode auf 8-bit zu bringen
}
echo chr($x); //zeigt das als Binärcode ausgegebene Zeichen normal an
}
?>
</body>
</html>
Da die Ausgabe von Umlauten als Binärcode mit sprintf nicht funktioniert hat (es sind immer über 8-stellige Zahlen herausgekommen), habe ich mir gedacht, den eingegeben Text vorher zu codieren. In dem Beispiel ist jetzt angenommen, dass der User ein Zeichen angibt. Wenn das ein Umlaut ist, wird es zu einer Zeichenfolge umgewandelt, die einzeln durch die for Schleife läuft. Für jedes dieser Zeichen soll ein 8-stelliger Binärcode ausgegeben werden. Die Ausgabe sieht aber so aus (für ü):
ü
38
00100110
&38
00100110
&38
00100110
&38
00100110
&38
00100110
&38
00100110
&38
...
Wo ist da mein Fehler? Arbeite jetzt schon seit Stunden daran...