WinFuture-Forum.de: MySQL und PHP geben keine Umlaute aus, trotz UTF-8 - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

MySQL und PHP geben keine Umlaute aus, trotz UTF-8


#1 Mitglied ist offline   borsTiHD 

  • Gruppe: Mitglieder
  • Beiträge: 5
  • Beigetreten: 29. Oktober 11
  • Reputation: 0

geschrieben 29. Oktober 2011 - 09:22

Hallo,

ich bin noch ein Anfänger was die Webprogrammierung angeht,
aber bin mittlerweile zu den Datenbanken vorgestoßen.

Jetzt hab ich allerdings ein großes Problem und hoffe ihr könnt mir da weiterhelfen.
Zunächst einmal, hatte ich am Anfang bei HTML schon Probleme mit den Umlauten gehabt.
Das ganze löste ich mithilfe des Notepad++ indem ich alle meine Dokumente auf UTF-8 konvertiert habe.
Zusätzlich hab ich meinen Metatag geändert:

<meta http-equiv="content-type" content="text/html; charset=utf-8" />


Dann fing ich mit PHP an, dort hatte ich seit der Umstellung meiner Kodierung keine Probleme mehr mit Umlauten.
Alles war bestens, doch jetzt bin ich einen Schritt weiter gegangen und fange mit Datenbanken an.

Ich habe zunächst in meiner Xampp Umgebung über phpmyadmin eine neue Datenbank angelegt, mit der Kollation "utf8_general_ci".
In dieser DB hab ich eine Tabelle im Format "MyISAM" angelegt, welche auch Kollation "utf8_general_ci" bekommen hat.
Diese Tabelle hat 5 Felder, 2 davon reine Zahlenfelder, die anderen 3 sind "varchars" und denen gab ich ebenfalls "utf8_general_ci".

Ich hoffe zunächst einmal das ich so alles richtig erklärt habe und ihr mir folgen könnt.
Das ganze wollte ich nun in meinen PHP Dokumenten auslesen lassen, doch sobald ich mit meinem Browser auf meine Webseite gehe und das Script meine Daten aus der Datenbank ausliest, werden alle Umlaute mit einem "?" markiert.

Ich hab hier ein Bild für euch, wie das ganze aussieht:

Angehängtes Bild: mysql_ausgabe.PNG

Jetzt komme ich zu meiner eigentlichen Frage.
Wo hab ich einen Hänger, bzw. was habe ich falsch gemacht und was muss ich ändern, damit ich eine korrekte Ausgabe mit Umlauten aus meiner Datenbank bekomme?

Damit ihr auch wirklich alles an Infos habt, hab ich hier noch mein kleines Script, das die Daten auslesen soll. Falls sich der Fehler dort versteckt.

<?php
	$db=mysql_connect("localhost","root","pw");
	if ($db==false) 
		{ 
		echo "Keine Verbindung möglich!"; 
		exit; 
		} // if
	
	mysql_select_db("kneipentest_bastian",$db) or exit ("Datenbank kann nicht geöffnet werden");
	
	//SQL Befehl abschicken
	$sql = "SELECT * FROM kneipen";
	$erg = mysql_query ($sql,$db) or die ("Fehlermeldung = ". mysql_error());
	
	//Ausgabe
	$anz = mysql_num_rows($erg);
	mysql_close($db);
	for ($i=0; $i<$anz;$i=$i+1)
	{
		$a=mysql_result($erg, $i, "id");
		$b=mysql_result($erg, $i, "Name");
		$c=mysql_result($erg, $i, "Art");
		$d=mysql_result($erg, $i, "Note");
		$e=mysql_result($erg, $i, "Kommentar");
		echo "$b - "; 
		echo "$c - "; 
		echo "$d - "; 
		echo "$e <br/>";
	} //for	
?>



Ich hoffe ihr könnt mir weiterhelfen.
Vielen Dank im voraus. :)


Mit freundlichen Grüßen
borsTiHD

Dieser Beitrag wurde von borsTiHD bearbeitet: 29. Oktober 2011 - 09:31

0

Anzeige



#2 Mitglied ist offline   TO_Webmaster 

  • Gruppe: Moderation
  • Beiträge: 3.212
  • Beigetreten: 27. März 02
  • Reputation: 82
  • Geschlecht:Männlich

geschrieben 29. Oktober 2011 - 11:13

Hmm, ich habe dazu 3 Vermutungen:

1. (abhängig von Webservereinstellung) Ich habe es schon öfter erlebt, dass der UTF-8 Metatag nicht das tut, was man erwartet, da er im Browser "zu spät" ankommt. Stattdessen musste dann mit PHP folgender Header gesendet werden:
header('Content-Type: text/html; charset=utf-8');

Der Metatag war dann überflüssig.

2. (vermutlich abhängig von der MySQL-Konfiguration) Du könntest mal versuchen, als erstes Query folgendes rauszusenden:
mysql_query("SET NAMES 'utf8'");


3. Stehen die Umlaute wirklich mit der richtigen Kodierung in der Datenbank? Manchmal kommt es vor, dass ISO-Umlaute in einer UTF-8 DB stehen oder umgekehrt.

MfG TO_Webmaster
The old reverend Henry Ward Beecher
called a hen the most elegant creature.
The hen pleased for that,
laid an egg in his hat.
And so did the hen reward Beecher.
0

#3 Mitglied ist offline   borsTiHD 

  • Gruppe: Mitglieder
  • Beiträge: 5
  • Beigetreten: 29. Oktober 11
  • Reputation: 0

geschrieben 29. Oktober 2011 - 11:28

Tausend Dank :D
Habs auch parallel gerade woanders gefunden.
Dein 2. Tipp hat funktioniert.

Hab in meinem PHP Code so gut wie am Anfang meiner Datei folgendes hinzugefügt:
$names=mysql_query('set names utf8');


Jetzt bekomme ich alles richtig und mit meinen gewünschten Umlauten angezeigt :)
Um deine Frage aber noch zu beantworten.
Unter phpmyadmin werden und wurden auch schon alle Umlaute korrekt angezeigt.
Habe alle meine Daten über phpmyadmin in die Tabellen per Hand eingetragen.


Jetzt nur fürs Verstehen...
Wieso, obwohl bei mir Dokumente und MySQL vollständig auf UTF-8 eingestellt sind, musste ich jetzt noch diesen einen MySQL Befehl an den Anfang mit reinschreiben?

Gibt es dazu einen bestimmten Grund?
Benutze die aktuellste Version von XAMPP für Windows.

Vielen Dank :)

Dieser Beitrag wurde von borsTiHD bearbeitet: 29. Oktober 2011 - 11:30

0

#4 Mitglied ist offline   TO_Webmaster 

  • Gruppe: Moderation
  • Beiträge: 3.212
  • Beigetreten: 27. März 02
  • Reputation: 82
  • Geschlecht:Männlich

geschrieben 29. Oktober 2011 - 12:49

Beitrag anzeigenZitat (borsTiHD: 29. Oktober 2011 - 11:28)

Wieso, obwohl bei mir Dokumente und MySQL vollständig auf UTF-8 eingestellt sind, musste ich jetzt noch diesen einen MySQL Befehl an den Anfang mit reinschreiben?

Das sollte eigentlich ohne dieses Query gehen, wenn alles richtig eingestellt ist. Woran es genau liegt, weiß ich leider auch nicht. Ich denke, dass in der MySQL-Konfiguration noch irgendein Character-Set eingestellt werden muss. Im schlimmsten Fall muss MySQL anders kompiliert werden, aber das denke ich eigentlich nicht.

MfG TO_Webmaster
The old reverend Henry Ward Beecher
called a hen the most elegant creature.
The hen pleased for that,
laid an egg in his hat.
And so did the hen reward Beecher.
0

#5 Mitglied ist offline   borsTiHD 

  • Gruppe: Mitglieder
  • Beiträge: 5
  • Beigetreten: 29. Oktober 11
  • Reputation: 0

geschrieben 29. Oktober 2011 - 14:26

Ok, dann belasse ich es mal dabei.
Hast mir jedenfalls stark geholfen :)
Danke nochmals.
0

#6 Mitglied ist offline   Leo01 

  • Gruppe: Mitglieder
  • Beiträge: 1
  • Beigetreten: 14. November 12
  • Reputation: 0

geschrieben 14. November 2012 - 19:20

Hallo Forum,
ich weis, ich weis ... das Thema ist tot ... Blablabla aber mir hat nichts davon geholfen.

Das Thema ist einer der ersten Hits in Google und deswegen wollte ich mein Lösungsweg hinzufügen um womöglich auch anderen Leuten zu helfen:

mysqli_set_charset($dblink, 'utf8');


Das wars schon...
Have Fun =D
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0