bierkistenschlepper
Goto Top

PHP - Encoding - Problem

Hallo, ich habe folgendes Problem mit dem Encoding.

MySQL DB ist UTF8, Im Header steht
<!DOCTYPE html PUBLIC "-W3CDTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="de">
<head>

<title>Stammtisch f&uuml;r Schwerh&ouml;rige Freiburg</title>
<meta http-equiv="content-type" content="text/html; charset="utf-8">

also ebenfalls UTF8.

Folgendes Problem:
Wenn ich in die DB schreibe passiert bei folgender Konfiguration des Strings in PHP unterschiedliches in IE und Opera.

$kommentar = trim($_POST['kommentar']))
IE alles klar, Opera macht aus äüöß Ã¤Ã¼Ã¶ÃŸ

$kommentar = utf8_decode(trim($_POST['kommentar']))
Opera: alles ok, IE macht aus äüöß ??

$kommentar = utf8_encode(trim($_POST['kommentar']))
Geht in beiden Browsern nicht-->klar

Aber wie zum Henker kriege ich den String in allen Browsern richtig in die DB geschrieben?

Es geht um www.shstammtisch.de

Content-ID: 121414

Url: https://administrator.de/contentid/121414

Ausgedruckt am: 25.11.2024 um 21:11 Uhr

godlie
godlie 27.07.2009 um 15:41:44 Uhr
Goto Top
Schmeis den meta tag content-type mal raus und schick bevor du irgendwelche ausgaben machst
mal ein
header("Content-Type: text/html; charset=UTF-8")  
an den Browser damit der sich auskennt was da für Zeugs ankommen sollte.
filippg
filippg 27.07.2009 um 15:45:28 Uhr
Goto Top
Hallo,

es geht doch um das Encoding der Daten, die der Client an den Server schickt oder? Dann ist eine encoding-Definition im Seitenheader zwar sicher nicht falsch, aber nur begrenzt hilfreich. Lösung: füge in das <form>-Tag ein "accept-charset="-Attribut ein. Damit solltest du zumindest von allen Browser das gleiche Ergebnis erhalten.

Gruß

Filipp
Bierkistenschlepper
Bierkistenschlepper 27.07.2009 um 15:59:41 Uhr
Goto Top
Ein accept-charset ist bereits da...
echo '<form action="termine.php?eid='.$event_to_show.'" method="post" accept-charset="utf-8">';
Supermax
Supermax 27.07.2009 um 20:24:06 Uhr
Goto Top
Schau mal mit einem geeigneten Tool (z.B. Fiddler für IE, Live HTTP Headers für Firefox), welches Encoding im HTTP-Header "Content-Type" angegeben ist. Wenn im Dokument selbst eine andere Angabe steht als der Webserver in seinen Headern ankündigt, geraten manche Browser aus dem Tritt. Standardkonform ist das Verhalten, daß die Header direkt vom Webserver Vorrang vor den Angaben im entsprechenden Meta-Tag haben.

Eventuell schafft eine .htaccess (falls der Webserver Apache zum Einsatz kommt) mit der Zeile
AddDefaultCharset Off
oder
AddDefaultCharset "gewünschte Codierung"  
Abhilfe.
Bierkistenschlepper
Bierkistenschlepper 28.07.2009 um 00:31:49 Uhr
Goto Top
Der erste Tipp hats gebracht. Jedenfalls klappts nun in Opera, IE und FF.

Offenbar ist die Meta-Angabe nicht ganz standardkonform, jedenfalls meckert bei mir immer der Validator.

Und noch eine Frage:

Bei Emails habe ich das gleiche Problem. Ich nutze den PHPmailer. Welche Codierung sollte man bei Mails verwenden? Umlaute werden aktuell im Thunderbird als Fragezeichen dargestellt. Es handelt sich um Rein-Text-Mails ohne HTML (sonst wäre die Frage ja nicht aufgekommen)
Supermax
Supermax 28.07.2009 um 07:39:57 Uhr
Goto Top
Stimmt vor dem utf-8 ist das " zu viel, der HTML-Parser erkennt
<meta http-equiv="content-type" content="text/html; charset="utf-8">  
nur als
content-type: text/html; charset=

Bezüglich der Mails solltest du das Encoding verwenden, in dem deine Texte (aus dem Script oder aus der Datenbank etc.) vorliegen. Wenn deine Programmtexte und Datenbank-Textwerte in UTF-8 vorliegen, dann nimm UTF-8, ansonsten die passende 8-bit Codierung. Die meisten modernen eMail-Clients und webmailer können problemlos mit UTF-8 codierten Mails umgehen.
Bierkistenschlepper
Bierkistenschlepper 22.12.2009 um 01:12:08 Uhr
Goto Top
Ich muss mich leider nochmals melden.

Folgendes Problem:

Datenbank ist UTF8_general_ci.

RSS-FEED ist Iso 8869-1, steht im Header und im xml-Tag. Soweit so gut. Leider verhalten sich die Browser völlig unterschiedlich.

Wenn ich nun ein utf8_decode um einen String aus der DB mache, dann passiert folgendes: Opera zeigt es korrekt an, der IE zeigt nur Fragezeichen. Der Quelltext enthält in beiden Browsern auch nur Fragezeichen und es fehlen normale Buchstaben. Warum zeigt Opera (also der HTML-Interpreter) was anderes an, als im Quelltext steht und warum steht im Quelltext keine Umlaute?

Hier ein Link zum Feed: www.shstammtisch.de/rss.php

hier ein Scnipsel Code
while($_ROW = mysql_fetch_assoc($result)){
$date = strtotime($_ROW['datum']);
$name=utf8_decode($_ROW['name']);
$description = utf8_decode($_ROW['description']);
$content = utf8_decode("Was? ".$name."\n".
"Wo? ".$_ROW['place']."\n".
"Wann? ".date("d.m.Y",$date." ab ".date("G:i", $date)."\n".
"Beschreibung: \n".$description));

und Oben steht in der Datei Stammtisch für..., also mit ü nur der Browser zeigt kein ü an.