Seite 1 von 1

HTML charset UTF-8 und Umlaute

Verfasst: 18.04.2012, 16:22
von dahead
Hi,

ich habe folgendes Problem:

Auf meiner Seite verwende ich

Code: Alles auswählen

<meta charset="UTF-8" />
Die Dateien sind ebenfalls in UTF-8 abgespeichert.

Umlaute im normalen HTML Code werden korrekt dargestellt. Umlaute bei Daten, die aus der Datenbank ausgelesen werden, werden als Fragezechen dargestellt.

Datenbank, Tabelle und das Feld haben die Kollation utf8_general_ci.

Wenn ich bei der Datenbankverbindung

Code: Alles auswählen

mysql_set_charset&#40;'utf8'&#41;;
angebe, werden die Umlaute aus der DB auch korrekt angezeigt.

Aber dann habe ich das Problem, dass meine Volltextsuche nicht mehr richtig funktioniert. Z.B. werden dann Wörter mit Umlauten nicht mehr gefunden und Ähnliches.

Wenn ich aber den HTML charset auf iso-8859-1 stelle, erhalte ich ein umgekehrtes Ergebnis: Umlaute im HTML Code werden richtig angezeigt und Umlaute aus der DB werden nicht korrekt dargestellt.

Hat jemand eine Idee?

MfG

Verfasst:
von
SEO Consulting bei ABAKUS Internet Marketing
Erfahrung seit 2002
  • persönliche Betreuung
  • individuelle Beratung
  • kompetente Umsetzung

Jetzt anfragen: 0511 / 300325-0.


Verfasst: 18.04.2012, 17:08
von Melegrian
Diese Funktion hatte ich mal für eine Suche über File-System geschrieben, weil mich utf8_decode() nicht weiter brachte.

Code: Alles auswählen

function UmlautINS&#40;$umlautINS&#41;&#123;

	$sucheuml = array&#40;'Ä','ä','Ö','ö','Ü','ü','ß',"&Auml;","&auml;","&Ouml;","&ouml;","&Uuml;","&uuml;","&szlig;"&#41;;    
	$ersetzel = array&#40;'Ä','ä','Ö','ö','Ü','ü','ß','Ä','ä','Ö','ö','Ü','ü','ß'&#41;;
	$guteuml  = str_replace&#40;$sucheuml,$ersetzel,$umlautINS&#41;;

	return $guteuml;
	&#125;
Falls die Funktion noch nicht alle Zeichen berücksichtigt, so kannst Du die ja ergänzen. Ausgabe ist einfach $var = UmlautINS($var); wie üblich. Kann auch sein, dass da einiges vertauscht werden muss, denn ich durchsuche mit einer ISO-Suche ISO und UTF-8 Dateien. Vielleicht auch so herum:

Code: Alles auswählen

      $erstens  = array&#40;'Ä','ä','Ö','ö','Ü','ü','ß'&#41;;
      $zweitens = array&#40;'Ä','ä','Ö','ö','Ü','ü','ß'&#41;;
      $drittens = str_replace&#40;$erstens,$zweitens,$drittens&#41;;
Und die Funktion auf (Parameter-Wert_von_Suche) anwenden, nicht auf Ausgabe.

Ansonsten, wenn Du ein Formular für die Volltextsuche nimmst, so muss Du das auch als UTF-8 abspeichern, bzw. auch bei einem Formular kannst Du charset angeben:

Code: Alles auswählen

<form name="Suche" action="..." method="get" accept-charset="utf-8">
Du könntest mit mysql_client_encoding() auch mal abfragen, ob die Datenbank wirklich UTF-8 für die Verbindung verwendet:

https://www.php.net/manual/de/function. ... coding.php

Verfasst: 19.04.2012, 16:33
von gatekeeper
Die Tabellen und Spalten müssen auch utf8 sein, sowie natürlich der Inhalt

Verfasst: 19.04.2012, 21:29
von Nokes
Ich hatte bei mir auch das Problem, dass Umlaut "komisch" angezeigt werden. UTF-8 hat auch nichts gebracht, doch ein Freund hat mir den Tipp mit ISO gegeben. Also:

Code: Alles auswählen

<meta charset="iso-8859-2" >