# Komisches Zeichen wird ausgegeben (ï»¿)



## alex130 (8. Mai 2007)

Hi
Es tut mir leid, dass ich nochmal einen Thread aufmachen, aber ich habe ein sehr großes Problem und zwar lese ich News aus einer Tabelle aus und da wird ein komisches Zeichen ausgegeben, und zwar das hier: 
	
	
	



```
ï»¿
```
Allerdings wird das nur in wenigen Dateien angezeigt. 
Weiß jemand warum?
Hier der Quellcode der ausgegeben wird:

```
<!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=iso-8859-1" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<link rel="stylesheet" type="text/css" href="style.css" />
</head>
<body>

<div id="container">
<div id="header"></div>
<div class="leftCol">
<div class="box"> 
<html>
<head>

<script type="text/javascript">
<!--

function show(divid) {
d=document;
d.getElementById("Filme").style.display="none";
d.getElementById("PSP").style.display="none";
d.getElementById("PSP2").style.display="none";
d.getElementById("Audio").style.display="none";

d.getElementById(divid).style.display="inline";

}
//-->
</script></head>


<div align="center" class="menu_top">Navigation</div>
&nbsp;<br>
&nbsp;&nbsp;&nbsp;<a href="index2.php">Home</a><br>
&nbsp;&nbsp;&nbsp;<a href="home.php?site=Partner">Partner</a><br>
&nbsp;&nbsp;&nbsp;<a href="http://web367.servana.de/wbb2/hmportal.php">Forum</a><br>
&nbsp;&nbsp;&nbsp;<a href="home.php?site=FAQ">FAQ/Hilfe</a><br>
&nbsp;&nbsp;&nbsp;<a href="home.php?site=Links">Links</a><br>

&nbsp;<br>

&nbsp;&nbsp;&nbsp;<a href="#" onClick="show('Filme')">Filme</a><br>
<div id="Filme" style="display:none">
&nbsp;&nbsp;&nbsp; - <a href="home.php?site=a-z&buchstabe=a&Kategorie=Filme&Kategorie2=DVDR">DVDR</a><br>
&nbsp;&nbsp;&nbsp; - <a href="home.php?site=a-z&buchstabe=a&Kategorie=Filme&Kategorie2=AVI/XVID">AVI/XVID</a><br>
&nbsp;&nbsp;&nbsp; - <a href="home.php?site=a-z&buchstabe=a&Kategorie=Filme&Kategorie2=MPEG">MPEG</a><br>

&nbsp;&nbsp;&nbsp; - <a href="home.php?site=a-z&buchstabe=a&Kategorie=Filme&Kategorie2=Serien">Serien</a><br>
&nbsp;&nbsp;&nbsp; - <a href="home.php?site=a-z&buchstabe=a&Kategorie=Filme&Kategorie2=Anime">Anime</a><br>
&nbsp;&nbsp;&nbsp; - <a href="home.php?site=a-z&buchstabe=a&Kategorie=Filme&Kategorie2=Serien&TV">Serien & TV</a><br>
&nbsp;&nbsp;&nbsp; - <a href="home.php?site=a-z&buchstabe=a&Kategorie=Filme&Kategorie2=Musik Videos">Musik Videos</a><br>

&nbsp;&nbsp;&nbsp; - <a href="home.php?site=a-z&buchstabe=a&Kategorie=Filme&Kategorie2=Sonstige">Sonstige</a> <br>
</div>
&nbsp;&nbsp;&nbsp;<a href="#" onClick="show('Audio')">Audio</a><br>

<div id="Audio" style="display:none">
      &nbsp;&nbsp;&nbsp; - <a href="home.php?site=a-z&buchstabe=a&Kategorie=Audio&Kategorie2=Alben">Alben</a><br>
      &nbsp;&nbsp;&nbsp; - <a href="home.php?site=a-z&buchstabe=a&Kategorie=Audio&Kategorie2=Single">Single</a><br>

      &nbsp;&nbsp;&nbsp; - <a href="home.php?site=a-z&buchstabe=a&Kategorie=Audio&Kategorie2=einzelne Tracks">einzelne Tracks</a><br>
      &nbsp;&nbsp;&nbsp; - <a href="home.php?site=a-z&buchstabe=a&Kategorie=Audio&Kategorie2=Hörbücher">Hörbücher</a><br>
      &nbsp;&nbsp;&nbsp; - <a href="home.php?site=a-z&buchstabe=a&Kategorie=Audio&Kategorie2=Soundtrack">Soundtrack</a><br>
      &nbsp;&nbsp;&nbsp; - <a href="home.php?site=a-z&buchstabe=a&Kategorie=Audio&Kategorie2=Sonstiges">Sonstiges</a><br>

</div>

&nbsp;&nbsp;&nbsp;<a href="home.php?site=a-z2&buchstabe=a&Kategorie=PC_Games">PC Games</a><br>
&nbsp;&nbsp;&nbsp;<a href="home.php?site=a-z2&buchstabe=a&Kategorie=PC_Appz">PC Appz</a><br>
&nbsp;&nbsp;&nbsp;<a href="home.php?site=Konsolen">Konsolen</a><br>
&nbsp;&nbsp;&nbsp;<a href="home.php?site=a-z2&buchstabe=a&Kategorie=Sonstige">Sonstige</a><br>
&nbsp;&nbsp;&nbsp;<a href="home.php?site=a-z2&buchstabe=a&Kategorie=Handy">Handy</a><br>
&nbsp;&nbsp;&nbsp;<a href="home.php?site=a-z2&buchstabe=a&Kategorie=XXX">XXX</a><br>
&nbsp;&nbsp;&nbsp;<a href="home.php?site=a-z2&buchstabe=a&Kategorie=Ebooks">Ebooks</a><br>
&nbsp;&nbsp;&nbsp;<a href="#" onClick="show('PSP')">PSP</a><br>

<div id="PSP" style="display:none">
      &nbsp;&nbsp;&nbsp; - <a href="home.php?site=a-z2&buchstabe=a&Kategorie=PSP&Kategorie2=Appz">Appz</a><br>
      &nbsp;&nbsp;&nbsp; - <a href="home.php?site=a-z2&buchstabe=a&Kategorie=PSP&Kategorie2=Filme">Filme</a><br>
</div>
      &nbsp;&nbsp;&nbsp;<a href="#" onClick="show('PSP2')">PSP-Games</a><br>
<div id="PSP2" style="display:none">
      &nbsp;&nbsp;&nbsp; - <a href="home.php?site=a-z3&buchstabe=a&Kategorie=PSP&Kategorie2=Games&Kategorie3=EURO">EURO</a><br>

      &nbsp;&nbsp;&nbsp; - <a href="home.php?site=a-z3&buchstabe=a&Kategorie=PSP&Kategorie2=Games&Kategorie3=USA">USA</a><br>
      &nbsp;&nbsp;&nbsp; - <a href="home.php?site=a-z3&buchstabe=a&Kategorie=PSP&Kategorie2=Games&Kategorie3=Asia">Asia</a><br>
      &nbsp;&nbsp;&nbsp; - <a href="home.php?site=a-z3&buchstabe=a&Kategorie=PSP&Kategorie2=Games&Kategorie3=PSOne">PSOne</a><br>
      &nbsp;&nbsp;&nbsp; - <a href="home.php?site=a-z3&buchstabe=a&Kategorie=PSP&Kategorie2=Games&Kategorie3=PSP Homebrew">PSP Homebrew</a><br>

</div>
&nbsp;<br>
</div>

<div class="box2"> 
<div align="center" class="menu_top">Suche</div>
<form method="post" action="home.php?site=search">
<table width="150" border="0" class="table20">
  <tr>
<td class="table11" align="center">Kategorie:<br />
<select name="Kategorie"><option selected></option>
<option value="Video">Video</option>
<option value="Musik">Musik</option>

<option value="Programm">Programm</option>
<option value="Sonstige">Sonstige</option>
</select></td>
  </tr>
    <tr>
    <td class="table21" align="center">Titel:<br /><input type="text" name="Titel" size="17" /></td>
  </tr>
  <tr>
    <td class="table22" align="center"><input type="submit" name="submit" value="Suchen" /></td>

  </tr>
</table></form>
&nbsp;<br />


</div>
		  
 
	 
</div>
<div class="rightCol">
<div id="content">


ï»¿ <div class="border">
<div class="comment_top">test</div>

<div class="comment_top">(ID: 5)&nbsp; eingetragen am 08.05.2007 / 21:07:36</div>
<div class="comment">später</div>
</div>
&nbsp;<br>
&nbsp;<br>

 




</div>
<div id="footer">
<div align="center" class="Stil3">&copy; 2007 by PcMasters.at</div>
</div>

</div>
<div class="clear">&nbsp;</div>
</div>
</body>
</html>
```


----------



## lmarkus31 (8. Mai 2007)

Schau mal vor dem letzen DIV class="border" am Ende


----------



## alex130 (8. Mai 2007)

Hi
Ja ich sehe, dass es dort angezeigt wird, aber ich weiß nicht wodurch der Fehler erzeugt wird.
Hier ist die r_news.php:

```
<?php

include ("configs/config.inc.php");

$sql = mysql_query("SELECT * FROM `News` ORDER BY `Datum` DESC LIMIT 0,30");  

while ($row = mysql_fetch_assoc($sql))
{
$id = $row["Id"];
$Titel = $row["Titel"];
$News = $row["News"];
$Datum = $row["Datum"];    

echo '<div class="border">
<div class="comment_top">'.htmlspecialchars($row['Titel']).'</div>
<div class="comment_top">(ID: '.$id.')&nbsp; eingetragen am '.date('d.m.Y / H:i:s', $row['Datum'] == '' ? 0 : $row['Datum']).'</div>
<div class="comment">'.nl2br(htmlspecialchars($row['News'])).'</div>
</div>
&nbsp;<br>
&nbsp;<br>';

 }
 
?>
```

//edit: ich hab jetzt gemerkt, wenn ich die Codierung auf charset=utf-8" einstelle, dann ist der Fehler weg, aber dann werden wieder andere Sachen falsch dargestellt.


----------



## Azamur (8. Mai 2007)

So auf Anhieb sehe ich an dieser Stelle nichts. Ich würde aber vermuten, es kommt aus der Ecke, an der du das div id="content" ausgiebst. Schau mal dort. Da davor Zeilenumbrücke sind, könnte es sich evtl um einen tippfehler bei den Zeilenumbrüchen handeln.


----------



## alex130 (8. Mai 2007)

Hi
Thx aber dort sind keine Zeilenumbrüche, außerdem wird es ja nicht bei allen Dateien angezeigt, also muss es an der Codierung liegen...
thx


----------



## Gumbo (8. Mai 2007)

Das scheint mir die Byte Order Mark von UTF-8 zu sein. Speichere die Datei einfach ohne BOM und setze zusätzlich noch am Anfang des Skriptes das korrekte „Content-Type“-Header-Feld:
	
	
	



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


----------



## alex130 (8. Mai 2007)

Hi
Ich hab mir den Text vom Link durchgelesen und das mit dem header eingefügt, aber ich versteh das mit dem BOM nicht ganz. Jetzt wird es richtig angezeigt, aber jetzt wird z.B. später, falsch angezeigt


----------



## Gumbo (8. Mai 2007)

Dann musst du alle betroffenen Dateien ohne BOM speichern.


----------



## alex130 (8. Mai 2007)

Wie kann ich die ohne BOM speichern?
Thx


----------



## Gumbo (8. Mai 2007)

Beim Speicherndialog des Editors müsste es eine entsprechende Option geben.


----------



## alex130 (8. Mai 2007)

Hi
Irgendwie bin ich zu blöd, ich habs jetzt ohne BOM gespeichert und auch das mit dem header eingefügt, aber es funktoniert trotzdem nocht nicht.
Ich weiß einfach nicht mehr weiter 
Thx


----------



## Gumbo (8. Mai 2007)

Hast du auch alle betroffenen Dateien ohne BOM gespeichert?


----------



## alex130 (8. Mai 2007)

Ich hab jetzt am Anfang mal nur die r_news.php ohne BOM gespeichert, soll ich die home.php (dort wird die r_news.php in den content bereich included) auch ohne BOM speichern?
Thx


----------



## Gumbo (9. Mai 2007)

Bei UTF-8 ist die Byte Order Mark nicht wichtig, da es nur eine Byte-Reihenfolge gibt. So kann die BOM nur als Indiz für die UTF-8-Kodierung dienen. Da die Kodierung allerdings explizit im HTTP-Header angegeben werden sollte (dazu dient das „Content-Type“-Header-Feld), ist sie in diesem Fall ganz nutzlos und kann und sollte sogar weggelassen werden, damit es nicht (wie in deinem Fall zu sehen) zu Fehlinterpretationen kommt. Wichtig ist jedoch weiterhin, dass die verwendete Kodierung explizit im HTTP-Header-Feld „Content-Type“ angegeben wird und nicht erst im Dokument selbst.


----------



## alex130 (9. Mai 2007)

Hi
Ich hab ja die Codierung im Header angegeben, hier ist meine home.php dort wird die r_news.php includet.

```
<?php
ob_start(); 
?>
<!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=iso-8859-1" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<link rel="stylesheet" type="text/css" href="style.css" />
</head>
<body>

<div id="container">
<div id="header"></div>
<div class="leftCol">
<?php include("navigation.php"); ?>
</div>
<div class="rightCol">
<div id="content">


<?php

  switch($_GET['site']) {
    case "Links":include("Links.php");
    break; 
    case "FAQ":include("FAQ.php");
    break; 
    case "Partner":include("Partner.php");
    break; 
    case "News":include("News.php");
    break; 
	
    default:
      include("r_news.php");
  };
  
?> 




</div>
<div id="footer">
<div align="center" class="Stil3"><?php include 'footer.php'; ?></div>
</div>
</div>
<div class="clear">&nbsp;</div>
</div>
</body>
</html>

<?php
ob_end_flush();
?>
```
Und hier ist mein Code von der r_news.php:

```
<?php
include ("configs/config.inc.php");

$sql = mysql_query("SELECT * FROM `News` ORDER BY `Datum` DESC LIMIT 0,30");  

while ($row = mysql_fetch_assoc($sql))
{
$id = $row["Id"];
$Titel = $row["Titel"];
$News = $row["News"];
$Datum = $row["Datum"];    

echo '<div class="border">
<div class="comment_top">'.$row['Titel'].'</div>
<div class="comment_top">(ID: '.$id.')&nbsp; eingetragen am '.date('d.m.Y / H:i:s', $row['Datum'] == '' ? 0 : $row['Datum']).'</div>
<div class="comment">'.nl2br($row['News']).'</div>
</div>
&nbsp;<br>
&nbsp;<br>';

 }
 
?>
```

Hoffe ihr könnt mir helfen.
Thx


----------



## Gumbo (9. Mai 2007)

Der HTTP-Header ist keinesfalls mit dem Kopfbereich eines HTML-Dokuments zu verwechseln! Denn der Kopfbereich des HTML-Dokuments enthält nur Metadaten über den eigentlichen Dokumentkörper, während der HTTP-Header Metadaten über den gesamten Nachrichtenkörper, also das gesamte HTML-Dokument, enthält. Und enthält der HTTP-Header nicht genügend oder gar falsche Informationen, kann der Nachrichtenkörper gar nicht oder nur falsch verarbeitet werden und es kann unter anderem zu Fehlinterpretationen kommen. Und genau das ist die genannte Zeichenfolge „ï»¿“, nämlich eine Fehlinterpretation, da angegebene Zeichenkodierung nicht mit der tatsächlich verwendeten übereinstimmt.

Deshalb ist es notwendig, die verwendete Zeichenkodierung im HTTP-Header anzugeben und nicht erst im Nachrichtenkörper selbst. Und genau das ist mit folgender bereits genannten Anweisung möglich:
	
	
	



```
header('Content-Type: text/html; charset=utf-8');
```
Wichtig ist, dass diese Anweisung noch vor jeglicher Ausgabe steht, da sonst der HTTP-Header nicht mehr verändert werden kann. Wird die Ausgabe allerdings gepuffert (ob_start()-Funktion), kann diese Anweisung auch noch nach einer Ausgabe erfolgen, solange die gepufferte Ausgabe nicht schon gesendet wurde.


----------



## alex130 (9. Mai 2007)

Danke nun funktoniert es :T
Danke dass du so viel Geduld mit mir hattest


----------



## TTek (9. Mai 2007)

Ich hatte genau das gleiche Problem, allerdings habe ich es anders gelöst. Ich hatte es mit einem anderen Editor geöffnet ich glaube es war Ultra edit bin mir aber nicht sicher, und dort habe ich merkwürdiger weise dann am Anfang vor allen andern Zeichen das hier gefunden "ï»¿"  :suspekt: 
Das merkwürdige war, der normale Windows Editor hat es nicht angezeigt..naja jetzt klappt es bei mir.


----------



## Gumbo (9. Mai 2007)

Ob diese Bitsequenz der UTF-8 Byte Order Mark (0xEF 0xBB 0xBF) dargestellt wird, hängt von der Zeichenkodierung ab, mit der das Dokument dekodiert wird. Denn nur in UTF-8 hat diese Bitsequenz eine besondere Bedeutung und wird deshalb nicht dargestellt. Bei anderen Zeichenkodierungen – so etwa der Zeichenkodierung des ISO-8859-1-Zeichensatzes – hat diese Bitsequenz aber keine besondere Bedeutung und wird daher zu normalen Zeichen dekodiert, was dann beispielsweise zu „ï»¿“ werden kann, da die einzelnen Bytes eben für genau diese Zeichen stehen: an der Position 0xEF steht das „ï“, an der Position 0xBB das „»“ und an der Position 0xBF das Zeichen „¿“.


----------



## alex130 (4. Juni 2007)

Hi
Ich hab schon wieder ein Problem, hab gerade gemerkt, dass in meiner Db z.B. stat "Österreich" - "Ã–sterreich" steht, wie kann ich das ändern?
Thx


----------



## Gumbo (4. Juni 2007)

Vermutlich ist die in der Datenbank zur Speicherung zu verwendende Zeichenkodierung/Zeichensatz falsch. Dieser müsste bei UTF-8 ebenfalls UTF-8 sein. Lies dir mal den Artikel UTF-8 im Zusammenspiel mit MySQL und PHP auf Barmasse.org durch, der die nötigen Schritte gut beschreibt.


----------



## alex130 (6. Juni 2007)

Hi
Was kann ich machen, wenn der Fehler wieder auftritt, ich aber nicht UFT-8 benutze, sonder iso-8859-1?
Thx


----------

