Keine Umlaute bei UTF-8 Kodierung

Xethon

Lieutenant
Registriert
Feb. 2005
Beiträge
533
Hallo,

ich bin langsam am verzweifeln. Ich habe eine php-Datei, die Daten aus einer Datenbank ausliest und ausgibt. In der Datenbank ist ein Navigationslink "Über mich" und das "Ü" wird als "?" angezeigt.
Ich habe schon alles probiert. Habe in meiner Entwicklungsumgebung PHPStorm das Default Encoding auf UTF-8, habe in der index.php und der include.php header('Content-Type: text/html; charset=utf-8'); eingetragen, habe in der index.php in den Metaangaben UTF-8 deklariert, meine MySQL-Datenbank in XAMPP und deren Tabellen sind auf utf-8_general_ci gesetzt.
Das "Ü" will einfach nicht korrekt angezeigt werden. Woran könnte es noch liegen?
 
probier mal nach öffnen der Datenbank-Verbindung, ein
PHP:
mysql_query("set names 'utf8'");
loszuschicken - das hat die PRobleme damals bei mir größtenteils beseitigt (gut, Debian & windows-client, aber egal...)
 
Hast du auch alles auf UTF-8 ausgelegt? Heißt PHP-Datei, Datenbank und die benötigte Deklaration in HTML? Sonst versuch mal die utf8_-Funktionen (utf8_encode, utf8_decode).
 
habe ich das mysql_query an die richtige stelle gepackt oder ist das egal?

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

$mysqli = new mysqli ("localhost","root","","website");
if ($mysqli->connect_error) {
    echo "Fehler bei der Verbindung: " . mysqli_connect_error();
    exit();
}
mysql_query("set names 'utf8'");  
$ergebnis = $mysqli->query("SELECT alias, link_text FROM menu;");
while ($zeile = $ergebnis->fetch_array()) {
    echo $zeile['link_text']." ";
}
$ergebnis->close();
$mysqli->close();
?>
 
nein, leider nicht :(

Ich hab ja das Gefühl, das liegt an XAMPP, aber im PHPmyAdmin steht, überall UTF-8. Ich hab echt keine Ahnung mehr...
 
Wie kommt denn das ? in die Datenbank? bzw. was passiert wenn du aus dem ? ein Ü machst?
 
Sind die PHP-Dateien SELBST UTF-8 (ohne BOM) kodiert abgespeichert?

Nein, an XAMPP liegt es nicht.
Du musst halt an einigen Stellen alles richtig machen damit es reibungslos klappt. Brauchte auch eine Weile bis bei mir UTF-8 perfekt ging. Da ich auch ausländische Sprachen (und Schriften) brauche, waren nicht nur die Sonderzeichen sondern teilweise eine ganze Sprache betroffen ;)
 
Hier hilft nur systematisches Vorgehen. Nach jedem Verarbeitungsschritt prüfen, ob der String noch "heile" ist.

Das fängt damit an, dass man prüft, ob der Wert in der Datenbank überhaupt korrekt inserted wurde, evtl. sind dort ja schon alle Strings kaputt, da hilft es dann nichts, wenn man anschließend alles korrekt macht.
 
Banthor schrieb:
Hier hilft nur systematisches Vorgehen. Nach jedem Verarbeitungsschritt prüfen, ob der String noch "heile" ist.

Das fängt damit an, dass man prüft, ob der Wert in der Datenbank überhaupt korrekt inserted wurde, evtl. sind dort ja schon alle Strings kaputt, da hilft es dann nichts, wenn man anschließend alles korrekt macht.

wie überprüfe ich das?

Bin mir nämlich sicher jetzt alles richtig gemacht zu haben. Ich zeige euch mal meine Dateien. Hier die index.php

Code:
<DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN">

<?php header( 'content-type: text/html; charset=utf-8' ); ?>

<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
		<title>Projekt</title>
		<link rel="stylesheet" href="blueprint/screen.css" type="text/css" media="screen, projection" />
        <link rel="stylesheet" href="blueprint/print.css" type="text/css" media="print" />
		<link rel=stylesheet type="text/css" href="style.css">
	</head>
	
	<body>
		<div class="container">
			<div id="header" class="span-24 last">
              <p><?php include 'includes/navi.php'; ?></p>
			</div>
 
			<div id="content" class="span-16">
              <p>Lorem Ipsum</p>
			</div>
 
			<div id="sidebar" class="span-8 last">
              <p>Lorem Ipsum</p>
			</div>
         
			<div id="footer" class="span-24 last">
              <p>Lorem Ipsum</p>; 
			</div>
		</div>
	</body>
	
</html>

includete navi.php:
Code:
<?php
header( 'content-type: text/html; charset=utf-8' );

$mysqli = new mysqli ("localhost","root","","website");
mysql_query("SET NAMES 'UTF8'"); 
if ($mysqli->connect_error) {
    echo "Fehler bei der Verbindung: " . mysqli_connect_error();
    exit();
} 
$ergebnis = $mysqli->query("SELECT alias, link_text FROM menu;");
while ($zeile = $ergebnis->fetch_array()) {
    echo $zeile['link_text']." ";
}
$ergebnis->close();
$mysqli->close();
?>

zusätzlich verwende ich das blueprint CSS-Framework. bei dem ich die screen.css und ie.css mit @charset "utf-8"; versehen habe. Die style.css im Hauptverzeichnis ebenfalls. Dann habe ich noch eine .htaccess:
Code:
AddCharset utf-8 .css .htm .html .js
php_value default_charset utf-8

Alle Dateien sind in UTF-8 (ohne BOM) abgespeichert. Ich bin echt ratlos
 
Hi,

ganz doofe Frage: Wo wird das "Ü" nicht angezeigt? Im Browser? Der ist aber vom Zeichensatz her schon richtig eingestellt oder?

VG,
Mad
 
Ja, im Browser wird das 'Ü' falsch dargestellt. Dieser verwendet als Kodierung aber auch UTF-8.
 
Zurück
Oben