PHP Umgang mit Umlauten - email-Versand

Trainmaster schrieb:
Mit erläutern meine ich nicht, einfach nur einen Skriptfetzen zu liefern. Wo genau ist das Problem? Hast du den String an verschiedenen Stellen mit var_dump ausgeben lassen, Stichwort: Debugging? Welchen Inhalt hat die Variable $content_htm?
Ergänzung ()

Und du bist sicher, dass die Kollation auf UTF-8 eingestellt ist? Bitte beachte, dass die Spalten einer Tabelle eine andere Kollation haben können, als die Tabelle selbst.

Hallo,

$content_htm = file_get_contents("/datei.htm)";

Hier die Datenbankeinstellungen:
zwischenablage-1635xla.jpg


Sollte alles passen.

Mit var_dump wird der String richtig angezeigt. Kein Abbruch am Umlaut.

Hier der Output an der Console:
zwischenablage-3d2431c.jpg
 
Zuletzt bearbeitet:
Was fehlt, und zwar unmittelbar bevor der Datenbankeintrag erfolgt, ist,
PHP:
$schlagzeile = utf8_encode($schlagzeile);
Schöner wäre es allemal, wenn die datei.htm als UTF-8 vorliegt. Ist das nicht möglich?
 
Trainmaster schrieb:
Was fehlt, und zwar unmittelbar bevor der Datenbankeintrag erfolgt, ist,
PHP:
$schlagzeile = utf8_encode($schlagzeile);
Schöner wäre es allemal, wenn die datei.htm als UTF-8 vorliegt. Ist das nicht möglich?

Doch, die Datei liegt als UTF-8 vor und wurde ohne BOM gespeichert (mit Notepad++). In der HTML-Datei ist nat. auch der Metatag enthalten. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">. Der dürfte aber nur für den Browser relevant sein.

Was ich jetzt noch nicht verstehe ist, warum ich das utf-8 decode vor dem Parsen und vor Schreiben in die Datenbank machen muss. Ok. Erst Decode, dann Encode. Und das brauche ich nur, weil für den Subject der Mail UTF-8 vorgegeben wird. In der HTML-Datei ist ja der Metatag dafür zuständig, sowie das Dateiformat (UTF-8 ohne BOM).

Das mit den Zeichensätzen ist aber ein Kuddelmuddel aber auch....

Eine Frage noch. Sollte man decode und encode vor und nach jedem str_replace machen, auch für den restlichen HTML-Content der in die Datenbank wandert?

Und noch ne letzte Sache. Mein Prover hat MySQL 5.0.85 installiert. 2 1/2 Jahre alt. Aktuell wäre 5.5x. Ein Nachteil?
 
Zuletzt bearbeitet:
Ich bin davon ausgegangen, dass die Datei nicht in UTF-8 vorliegt ... dann ist natürlich utf8_encode/decode überflüssig. Folgenden Code habe ich bei mir erfolgreich getestet:
PHP:
$content_htm = file_get_contents("datei.htm");
$find_schlagzeile = preg_match ("#id=sz(.*?)</td>#si",$content_htm,$match_schlagzeile);
if ($find_schlagzeile) {
    $schlagzeile = $match_schlagzeile[0];
    $schlagzeile = str_replace ("id=sz>","",$schlagzeile);
    $schlagzeile = str_replace ("</td>","",$schlagzeile);
    $schlagzeile = str_replace ("\n","",$schlagzeile);
    $schlagzeile = trim ($schlagzeile);
}
$sql = 'INSERT INTO test (test) VALUES (:test) ';				
$pstmt = Database::Singleton()->prepare($sql);
$pstmt->bindParam(':test', $schlagzeile);
$pstmt->execute();
 
Zurück
Oben