Sonderzeichen trotz UTF-8 teilweise nicht erkennbar

VirtualHHH

Grünschnabel
Hallo,

folgendes Problem habe ich: Obwohl ich den meta charset auf UTF-8 gesetzt habe, will man mir nicht überall wie gewünscht die Sonderzeichen anzeigen. Damit meine ich, dass alle Sonderzeichen, die der Nutzer eingegeben hat, angezeigt werden, jedoch nicht die die ich selber im Script eingefügt habe. Zum Beispiel Menü-Feld oder etwas aus der Fußzeile. Folgendes sieht man stattdessen: ?

Die Suchfunktion habe ich bereits benutzt. Google hat mir ebenfalls nicht helfen können.

Ich hoffe, ihr könnt mir helfen.

Gruß
 
Stammen die Zeichen aus einer Datenbank? Wenn ja, hast du die Daten auch in Unicode in der Datenbank stehen, soll heißen, welche Collation haben die Tabellen? Dann wäre auch noch die Frage der Verbindung zur Datenbank. Im Falle von MySQL muss man manchmal (kommt auf die Einstellungen in der my.ini an) den Query

Code:
mysqli_query("SET NAMES 'utf8'");

senden, oder im Falle von PDO

PHP:
$db = new PDO($dsn, $username, $password, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'"));
// oder
$db->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, "SET NAMES 'utf8'");

ausführen.

EDIT: Außerdem kann es auch was bringen, wenn man dem Webserver mitteilt, dass der Content in utf-8 ist:
PHP:
header('Content-Type: text/html; charset=utf-8');
 
Hallo saftmeister,

die Zeichen (also ?) stammen nicht von der Datenbank. Die habe ich im Editor selber eingetragen. Falls es jedoch etwas zur Sache tut: In der Datenbank werden die von den Nutzern eingegebenen Sonderzeichen ein wenig anders angezeigt (ü z.B.). Bei der Ausgabe auf der Website sieht man hingegen das 'normale' ü.

Bevor ich noch etwas falsch mache frage ich lieber sicherheitshalber: Der erste Code von dir funktioniert ja über mysqli. Ich selber arbeite über mysql. Würde dass denn auch so funktionieren? Ich habe mich nicht mit mysqli auseinandergesetzt, daher würde ich es vorziehen etwas ohne PDO oder in der Richtung auszuüben.

Die Sache mit header() habe ich an den Anfang meines PHP-Codes gesetzt (ist doch richtig so?). Was geändert hat sich dabei nicht.

----------------------
Hallo mermshaus,

deine Links konnten mir leider nicht weiterhelfen. Ich verwende PSPad als Editor und das Einfügen des header() hat auch nicht funktioniert.

Über weitere Hilfe würde ich mich freuen.

Gruß
 
Wie gesagt: Deine Quellcode-Datei ist vermutlich nicht in UTF-8 kodiert. Das solltest du im Editor einstellen können. Falls nicht, nutze einen anderen Editor.

- http://www.php.de/php-einsteiger/101627-editor-ide-let-me-tell-you-something.html

mysql ist veraltet. Nutze mysqli oder PDO.

- http://php.net/manual/en/mysqlinfo.api.choosing.php

Das hier ist aber alles äquivalent (je nach DB-Adapter eben):

PHP:
$mysqli->set_charset('utf8'); // mysqli ab PHP5.2.3
$dbh->exec('SET NAMES utf8'); // PDO
mysql_set_charset('utf8'); // mysql ab PHP5.2.3
mysql_query("SET NAMES `utf8`"); // veraltet

(mysqli_set_charset dürfte es auch noch geben.)

Der Vollständigkeit halber:

? ist in der Regel ein Zeichen aus ISO-8859-1/Windows-1252, das als UTF-8 interpretiert wird.

ü ist der umgekehrte Fall.
 
Zuletzt bearbeitet:
Hallo mermshaus,

ich habe das Format im Editor auf UTF-8 umkodiert.
Ich glaube, dass mein Problem eher weniger mit mysql zusammenhängt. Der Text, der nicht wie gewünscht angezeigt wird, steht in keiner Verbindung zu mysql.

Leider weiß ich immer noch nicht wie ich das Problem lösen kann.
 
Ich glaube, dass mein Problem eher weniger mit mysql zusammenhängt. Der Text, der nicht wie gewünscht angezeigt wird, steht in keiner Verbindung zu mysql.

Das glaube ich auch. Das zu MySQL waren einfach Zusatzinfos.

Kannst du eine Datei, in der das Problem auftritt, als gepacktes Archiv irgendwo hochladen (oder hier als Hexdump posten)? Dann könnte man mal gucken, ob das Encoding passt.
 
Hallo mermshaus,

ich hoffe es ist so richtig wie gewollt.

Gruß

index2.php - Hier wird die navionline.php includet. Copyright-Zeichen bei der Fußzeile wird hier durch ein Fragezeichen ersetzt. Gleiches gilt auch fürs Hauptmenü.
PHP:
<?php
session_start();
?>

<?php  
include("header.html");
?>
  
<?php
include ("db.php");
?>

<?php
         
if(!isset($_SESSION['username']))
{
  echo '
  <div id="site">
     <div id="header"></div>
     <div id="navi">
        <a href="index.php">Hauptmenü</a>
        <a href="login.php">Login</a>
        <a href="register.php">Registrieren</a>
        <a href="board.php">Forum</a>
     </div>
     <div id="content">
       <div id="content-top"></div>
       <div id="content-main">';	
       
  echo 'Bitte erst anmelden. <a href="login.php">Zurück</a>';
  echo '
       
       </div>
       <div id="content-bottom">© Fußzeile</div>
     </div>  
  </div>   

  </body>
</html>';
exit;
}
else
{ 
include("navionline.php");
//Rest ist denke ich unwichtig.

navionline.php - Hier befindet sich der Menüpunkt wo auch das Problem ist.
PHP:
<?php  

    $username = $_SESSION['username'];

    echo '
  <div id="site">
     <div id="header"></div>
     <div id="navi">
        <a href="index2.php">Hauptmenü</a>
//Rest ist auch hier nicht notwendig.

header.html
PHP:
<?php
header('Content-Type: text/html; charset=UTF-8');
?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head> 
  <meta http-equiv="content-type" content="text/html; charset=utf-8">
  <title></title>
  <link rel="stylesheet" type="text/css" href="style.css" />
  </head>
  <body>
 
Hi

den Inhalt der Dateien reinzukopieren ist bei Charsetproblemen eher nicht hilfreich,
weil es dadurch auch noch mehrmals verfälscht werden kann
(dein Browser, DB der Server hier usw.)

Lad bitte die ganze Datei als Anhang rauf:
Beim Antworten beim Büroklammersymbol (ggf. zuerst auf "Erweitert" klicken).
 
Hallo sheel,

ich habe verstanden. So, jetzt müsste es richtig sein.

Gruß
 

Anhänge

  • index2.txt
    1,7 KB · Aufrufe: 7
  • navionline.txt
    1,5 KB · Aufrufe: 3
  • header.txt
    323 Bytes · Aufrufe: 3

Neue Beiträge

Zurück