UTF8 Problem beim Titel

Matze202

Erfahrenes Mitglied
Hallo @all,

Ich habe das Problem, dass das Apostroph im Titel nicht richtig ausgegeben wird.


Folgendes habe ich bereits eingefügt, aber ohne Erfolg:
  • AddDefaultCharset utf-8 in die .htaccess geschrieben und die Datei im ANSI-Code gespeichert
  • <meta http-equiv="content-type" content="text/html; charset=utf-8" /> im HEAD-Bereich
  • header('Content-Type: text/html; charset=UTF-8'); am Anfang der Haupt-Index.php-Datei
  • Die gesamten Dateien sind außer der .htaccess-Datei sind mit UTF8 gespeichert.
  • Alle Tabellen der Datenbank sind mit utf8_unicode_ci eingerichtet.
Der gleiche Inhalt des Titels wird im Kopfbereich wiedergegeben, wo das Apostroph richtig ausgegeben wird, aber leider nicht im Titel.

Bis vorhin wurde das im Titel auch noch richtig angezeigt, aber da hatte ich auf einer Seite im Kopfbereich der Seite dieses Problem, welches nun nicht mehr habe. Da hatte ich dann die .htaccess-Datei leider mit utf8 abgespeichert und nen Error 500 bekommen. Als ich dies beseitigt hatte durch das speichern der .htaccess-Datei im ANSI-Code wird mir nun der Titel leider nicht mehr richtig angezeigt und ich habe leider keine Idee mehr.

Hat jemand noch eine Idee, woran es liegen könnte?

Mit freundlichen Grüßen

Matthias Berndt.
 
Hi

Kommt der Problemtext aus einer DB oder steht er fix in PHP-Dateien drin?

Welchen Editor verwendest du?

Hast du die ganzen Sachen in UTF-8 ohne BOM abgespeichert, falls der Editor sowas anbietet?
Wenn die .htaccess-Datei mit UTF-8 ohne BOM noch immer Serverfehler gibt, zeig einmal den ganzen Inhalt.

Beim <meta http-equiv="content-type" content="text/html; charset=utf-8" /> muss das utf groß geschrieben werden (zumindest bin ich mir nicht sicher, dass klein erlaubt ist; Groß geht sicher). Ebenfalls in der .htaccess großschreiben.

Ist die Seite irgendwo live anschaubar?
 
Zuletzt bearbeitet:
Danke @sheel für deine Anregungen.

Kommt der Problemtext aus einer DB oder steht er fix in PHP-Dateien drin?
1. Ja kommt aus einer Datenbank.
2. Ja wird in einer Datei angepasst.
3. Der Text aus dem Head-Bereich, welcher das gleiche enthält, aber richtig angezeigt wird, sah ich gerade, dass dieser doch noch nicht aus der DB kommt. Die DB ist aber mit dem Format utf8_unicode_ci versehen.

Welchen Editor verwendest du?
PSPad

Hast du die ganzen Sachen in UTF-8 ohne BOM abgespeichert, falls der Editor sowas anbietet?
Wenn die .htaccess-Datei mit UTF-8 ohne BOM noch immer Serverfehler gibt, zeig einmal den ganzen Inhalt.
Mit dem BOM kenn ich mich noch nicht aus und hab ich noch nicht in dem Programm gefunden, aber die gesamten PHP-Dateien habe ich auf UTF8 und die .htaccess auf ANSI eingestellt.

Beim <meta http-equiv="content-type" content="text/html; charset=utf-8" /> muss das utf groß geschrieben werden (zumindest bin ich mir nicht sicher, dass klein erlaubt ist; Groß geht sicher). Ebenfalls in der .htaccess großschreiben.
Ich habe die beiden Einträge (im Head und in der .htaccess) auf Großschreibung abgeändert, aber leider ohne erfolg.

Ist die Seite irgendwo live anschaubar?
Ich kann dir einen Zugang einrichten, welchen ich dir auf Wunsch gern per PN schicken würde.
 
Bis vorhin wurde das im Titel auch noch richtig angezeigt, aber da hatte ich auf einer Seite im Kopfbereich der Seite dieses Problem, welches nun nicht mehr habe. Da hatte ich dann die .htaccess-Datei leider mit utf8 abgespeichert und nen Error 500 bekommen. Als ich dies beseitigt hatte durch das speichern der .htaccess-Datei im ANSI-Code wird mir nun der Titel leider nicht mehr richtig angezeigt und ich habe leider keine Idee mehr.

Hat jemand noch eine Idee, woran es liegen könnte?
Hast du zwischen diesen Arbeitsschritten den Browser-Cache geleert, um sicherzustellen, dass alle involvierten Dateien wieder frisch vom Server geholt werden?
Beim <meta http-equiv="content-type" content="text/html; charset=utf-8" /> muss das utf groß geschrieben werden (zumindest bin ich mir nicht sicher, dass klein erlaubt ist; Groß geht sicher). Ebenfalls in der .htaccess großschreiben.
Die Kleinschreibung ist in beidem zulässig :)

Siehe Angabe der Zeichencodierung in HTML und Die Konfigurationsanweisung AddCharset.
 
  • welchen Zeichensatz nutzt die Verbindung zur Datenbank? Sollte es nicht UTF8 sein stelle entweder die Konfiguration der DB um oder sende als erstes das QUERY
Code:
SET NAMES 'utf8'
  • wenn der Problemstring in der Datei angepasst wird(du hast nicht geschrieben auf welche Art und Weise), achte darauf, daß diverse (String)Funktionen(bspw. htmlentities & htmlspecialchars) optional den Zeichensatz als Argument erlauben. Je nach PHP-version ist der Standardwert unterschiedlich(i.d.R. vor PHP 5.4 Latin1, danach UTF8 ) . Sollte also PHP<5.4 laufen und du mit UTF8 arbeiten musst du diesen Parameter auch auf UTF-8 setzen.
  • Zur BOM-Einstellung bei PSPad:Einstellungen->Programm-Verhalten->Ident.Bytes bei UTF8 hinzufügen
    Dort darf kein Häkchen gesetzt sein.
 
Zuletzt bearbeitet:
Danke euch beiden.

Hast du zwischen diesen Arbeitsschritten den Browser-Cache geleert, um sicherzustellen, dass alle involvierten Dateien wieder frisch vom Server geholt werden?
Dies habe ich getan, aber ohne Veränderung.

welchen Zeichensatz nutzt die Verbindung zur Datenbank? Sollte es nicht UTF8 sein stelle entweder die Konfiguration der DB um oder sende als erstes das QUER
Also die Formatierung der Datenbank habe ich komplett auf utf8_unicode_ci voreingestellt, aber die Verbindung weiß ich leider jetzt nicht, wie du das meinst bzw. man das macht.

wenn der Problemstring in der Datei angepasst wird(du hast nicht geschrieben auf welche Art und Weise), achte darauf, daß diverse (String)Funktionen(bspw. htmlentities & htmlspecialchars) optional den Zeichensatz als Argument erlauben. Je nach PHP-version ist der Standardwert unterschiedlich(i.d.R. vor PHP 5.4 Latin1, danach UTF8 ) . Sollte also PHP<5.4 laufen und du mit UTF8 arbeiten musst du diesen Parameter auch auf UTF-8 setzen
Ich habe PHP5.5 eingestellt und folgendes ist der Code, wo der Title überarbeitet wird.
PHP:
function title($db, $db_prefix, $page){
  $stmt = $db->prepare("SELECT wert FROM ".$db_prefix."page_data WHERE name = 'title'");
  $stmt->execute();
  $title = $stmt->fetchAll(PDO::FETCH_ASSOC);
  if(is_array($page)){
    $GLOBALS['page'] = $page;
    if($page['code'] == 'home'){
      return $title[0]['wert'];
    }else{
      return $page['name'].' von '.$title[0]['wert'];
    }
  }
}

Zur BOM-Einstellung bei PSPad:Einstellungen->Programm-Verhalten->Ident.Bytes bei UTF8 hinzufügen
Dort darf kein Häkchen gesetzt sein.
Da war doch ein Häkchen drin gewesen, welches ich entfernt habe und nun funktioniert die .htaccess auch mit UTF8.

Aber der Titel zeigt immer noch nicht das Apostroph und ich habe den Cache auch nochmal beim testen gelöscht.
 
Also die Formatierung der Datenbank habe ich komplett auf utf8_unicode_ci voreingestellt, aber die Verbindung weiß ich leider jetzt nicht, wie du das meinst bzw. man das macht.

Es ist da nicht nur entscheidend, was in der DB drinnen steht, es kommt drauf in wie die DB kommuniziert.

Um das generell einzustellen brauchst du natürlich root-Zugriff auf den DB-Server(mysql-config ändern und Server neu starten). Falls du diesen nicht hast setzte das query gleich in deiner DB-Klasse ab:
Code:
//initiierung der DB
$db=new mysqli('irgendwelche parameter');
//Festlegung des Verbindungs-Zeichensatzes
$db->query("SET NAMES 'utf8' ");
//ab sofort ist der Zeichensatz der  Kommunikation PHP->MySQL->PHP auf UTF-8 eingestellt
//es wird also angenommen dass PHP Daten in UTF-8 zur DB sendet und MySQL wird Daten in UTF-8 zurücksenden

Es kann natürlich sein dass die Daten aufgrund des falschen Verbindungs-Zeichensatzes schon falsch gespeichert sind(die DB denkt, da kommt Latin1 an...voreingestellter Zeichensatz, PHP sendet aber UTF8). Da hilft dann nur neues Einlesen der Daten mit korrektem Verbindungs-Zeichensatz.

Den voreingestellten Verbindungs-Zeichensatz solltest du per PHPMyAdmin ermitteln können.
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück