• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

UTF-8 Fehler?!

Basti225

Neues Mitglied
Hallo,
ich habe folgendes Problem:
Die Umlaute werden als '?' angezeigt. Trotz UTF-8
Jetzt find ich den Fehler nicht.
Kann mir hier jemand weiterhelfen?

Mit freundlichen Grüßen
Basti

Code:
<?php

header('Content-Type: text/html; charset=utf-8');

$strEmpfaenger = '[email protected]';

$strFrom       = '"Test" <[email protected]>';

$strSubject    = 'Betreff';

$strReturnhtml = '/nachricht.php';

$strDelimiter  = ":\t";

if($_POST)
{
 $strMailtext = "";

 while(list($strName,$value) = each($_POST))
 {
  if(is_array($value))
  {
   foreach($value as $value_array)
   {
    $strMailtext .= $strName.$strDelimiter.$value_array."\n";
   }
  }
  else
  {
   $strMailtext .= $strName.$strDelimiter.$value."\n";
  }
 }

 if(get_magic_quotes_gpc())
 {
  $strMailtext = stripslashes($strMailtext);
 }

 mail($strEmpfaenger, $strSubject, $strMailtext, "From: ".$strFrom)
  or die("Die Mail konnte nicht versendet werden.");
 header("Location: $strReturnhtml");
 exit;
}

?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de">
<head>
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
 <meta name="language" content="de" />    
<title> tunetek </title>
<link rel="stylesheet" type="text/css" href="css/style.css">
</head>
<body>
<div id="logo"></div>
<div id="date">
<? $datum = date("d.m.Y"); $uhrzeit = date("H:i"); echo $datum," - ",$uhrzeit," Uhr"; ?>
</div>
<div id="navi">
<ul>
<li id="aktuell"><a href="link.php">Home</a></li>
<li><a href="link.php">Test</a></li>
<li><a href="link.php">Test</a></li>
</ul>
</div>
<div id="dropdown">
<ul>
<li><a href="link.php">News</a></li>
<li><a href="link.php">Gästebuch</a></li>
<li><a href="link.php">Kontakt</a></li>
<li><a href="link.php">Impressum</a></li>
</ul>

</div>
<div id="bannertop">
<table><td>
<tr><a href="#"><img src="image/Testwerben.png"></a></tr>
<tr><a href="#"><img src="image/werbentop.png"></a></tr>
</td></table>
</div>
<div id="content">
<h1>Formular</h1>
<div class="line">
<br/>
<p>Kontakt! </p>
<div class="box">
<center>
<form action="<?php print $_SERVER['PHP_SELF']; ?>" method="post">
		<table style="margin-top:-25px;">
            <tr>
                <td>Name</td>
                <td><input type="text" name="Versender" size="40"/></td>
				</tr><br/><tr>
                <td>E-Mail</td>
                <td><input type="text" name="E-Mail" size="40"/></td>
				</tr><br/><tr>
				<tr><td>Bestelltyp</td>
				<td><select name="Bestelltyp" class="Auswahl" size="1">
                <option value="Auswahl">Bitte Auswählen</option>
                <option value="Test">TEST</option>
				<option value="2">2</option>
                </select></td>
				</tr><br/><tr>
                <td>Details</td>
                <td><textarea name="Bemerkungen" rows="9" cols="40" size="40">Größe...</textarea></td>
            </tr>
			</table>
            <p>
            <input type="submit" value="Senden" />
            <input type="reset" value="Zurücksetzen" />
            </p>
        </form></center>
</div></div>

</div>

<div id="contentright">
<div id="bannerright">
<tr><table>
<td><a href="#"><img src="image/testwerbungrechts.png"></a></td>
<td><a href="#"><img src="image/testwerbungrechts.png"></a></td>
</tr>
<tr>
<td><a href="#"><img src="image/testwerbungrechts.png"></a></td>
<td><a href="#"><img src="image/testwerbungrechts.png"></a></td>
</tr></table>
</div>
<font size="1"><a href="#">Hier Werben!</a></font>
<div class="line"><br/>
<h1> Lorem ipsum</h1>
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.
<div class="line"><br/>
<center>Copyright 2010</center><br/>
</div></div></div>
</body>
</html>
 
Werbung:
Ich vermute, die Seite ist nicht in UTF-8 abgespeichert. Das kannst du erkennen, wenn du dir online die Seiteninformationen anzeigst.
 
Werbung:
Die Vermutung dürfte stimmen. Der Editor, in dem das Dokument erstellt wird, speichert es nicht in UTF-8. (Das müsste sich in den Optionen irgendwo umstellen lassen.)

Die Seiteninformationen dürften aber UTF-8 anzeigen wegen des Header-Befehls:

PHP:
header('Content-Type: text/html; charset=utf-8');

Nur, um da etwaiger Verwirrung vorzubeugen.

Edit: Zu spät. :)
 
Ich hab in Notepad++ jetzt auf UTF-8 umgestellt :D
Jetzt kommt die Fehlermeldung:
Warning: Cannot modify header information - headers already sent by (output started at /users/tunetek/www/kontakt.php:1) in /users/tunetek/www/kontakt.php on line

Hat das jetzt was mit dem header-teil zu tun?
Wenn ja, ich hab probiert den head teil weg zu machen, aber dann besteht wieder das problem mit den Umlauten?!
 
Dein Editor hat wahrscheinlich zwei kleine Zeichen ganz am Anfang von den Dokumenten gesetzt.
 
Werbung:
Die "Zeichen" (Byte Order Mark) werden von darstellenden Programmen (Browser, Editor) nicht angezeigt, da sie mehr oder weniger "Metainformationen" sind, die nur verdeutlichen, wie der Dateiinhalt zu interpretieren ist.

Du müsstest in deinem Editor eine entsprechende Einstellung finden, um die Byte Order Mark abzuschalten.
 
Zuletzt bearbeitet:
Bei Notepad++ ist es möglich, einzustellen, dass die Datei in "UTF-8 ohne BOM" gespeichert werden soll. Das dürfte dein Problem lösen.
 
Werbung:
Siehe die in Post #8 verlinkte Wikipedia-Seite. Eine BOM sind (ca.) zwei Byte am Dateianfang vor jeder Art von Inhalt. Das heißt, wenn deine Datei mit <?php beginnt, du aber eine BOM nutzt, stehen in der Datei vor <?php noch zwei "unsichtbare" Zeichen.

Da diese Zeichen jedoch trotzdem vorhanden sind, wenn die Datei auf dem Server ausgeführt wird, werden sie von PHP interpretiert als handele es sich um normalen HTML-Code. (Alles außerhalb von PHP-Tags wird von PHP ignoriert.) Das heißt, die HTML-Ausgabe an den Browser beginnt bei diesen beiden BOM-Bytes.

Weil manche Funktionen von PHP (header(), session_start()) jedoch erfordern, dass noch keine Ausgabe an den Browser geschickt wurde (da diese Funktionen die Rückgabe-Header manipulieren wollen, die *immer* automatisch vor der ersten HTML-Ausgabe an den Client geschickt werden), führt das zu der Fehlermeldung von oben. Die Header sind schon verschickt, wenn etwa die Funktion header() ausgeführt werden soll, weil der Server bereits die beiden BOM-Zeichen an den Client geschickt hat.

Edit: ↓ :p
 
http://de.wikipedia.org/wiki/Byte_Order_Mark schrieb:
...in PHP vor Version 6[1] mit Standardeinstellungen[2] führt die BOM zur Ausgabe von Zeichen an den Browser, so dass ohne „output buffering“ keine HTTP-Header mehr geändert werden können.
Wikipedia :)
 
Werbung:
Hmm,
wenn ich bei Notepad++ die Kodierung 'UTF-8' nehme, klappt es mit den Umlauten.
Aber mein Kontaktformular funktioniert nicht mehr?!
Es taucht diese Fehlermeldung auf:

Code:
Warning: Cannot modify header information - headers already sent by (output started at /users/tunetek/www/tunetek/kontakt.php:1) in /users/tunetek/www/tunetek/kontakt.php on line 39

Wenn ich die Kodierung 'UTF-8 ohne BOM' nehme, funktioniert das Formular wieder, aber dann werden die Umlaute noch komischer angezeigt.

Anstatt 'Größe' steht da 'Größe'

Also ich komm jetzt nicht mehr so wirklich mit xD
 
Dann musst du das wohl anders machen. Speichere die Dateien mit dem BOM.

Und dann erstellst du einen neue Datei (ohne BOM UTF-8)

PHP:
<?php
header('Content-Type:text/plain;charset=utf-8');

$dateien = array('index.php','eineandere.php','this.php','db.php'); // usw.

foreach ($dateien as $datei) {
  file_put_contents($datei,substr(file_get_contents($datei),2));
  echo 'Die Datei '.$datei.' wurde entBOMt.'."\r\n";
}
?>
Mach wohl vorher noch ein Backup ;)
 
Soll ich die Datei ohne BOM so aussehen?

entbom.php
Code:
<?php
header('Content-Type:text/plain;charset=utf-8');

$dateien = array('kontakt.php');

foreach ($dateien as $datei) {
  file_put_contents($datei,substr(file_get_contents($datei),2));
  echo 'Die Datei '.$datei.' wurde entBOMt.'."\r\n";
}
?>

Weil so klappt es i.wie auch nicht?
Jetzt kommt bei der Fehlermeldung und auf der Seite selbst ganz oben ein '¿' ?
 
Werbung:
Wenn ich die Kodierung 'UTF-8 ohne BOM' nehme, funktioniert das Formular wieder, aber dann werden die Umlaute noch komischer angezeigt.

Anstatt 'Größe' steht da 'Größe'
das hat nichts mit oder ohne BOM zu tun, sondern das sind UTF-8 Zeichen, die du ISO kodierst betrachtest.
 
Werbung:
Ich hab jetzt die Methode von mermshaus ausprobiert und auf einmal klappt es (:
Also danke an euch alle!
 
Zurück
Oben