PHP htmlentities macht bei Umlauten Probleme

cooldiman1

Lt. Junior Grade
Registriert
Dez. 2011
Beiträge
299
Hallo CB-User,

hier ein kleiner Ausschnitt aus meinem Quellcode.

$beschreib = $alles['Beschreibung'];
$beschreib = str_replace("nl2br","\n", $beschreib);
$beschreib = str_replace("&nbsp"," ", $beschreib);

echo nl2br(htmlentities($beschreib, ENT_QUOTES));

Problem:

Aus einer Datenbank wird die Beschreibung ausgelesen wo sie vorher mit mysql_real_escape_string reingeschrieben wurde.
Nun enthählt meine Beschreibung aber Umlaute (ö,ä,etc.). Auf meinem Server wo alles veröffentlicht ist zeigen meine Themen mit dem Beschreibungfeld Umlaute an aber bei mir zu Hause nicht.
Ich benutze das aktuelle Xampp.
Auch wenn ich Backups vom Server mache und sie zu Hause 1 zu 1 aufspiele (Datenbank, Ordnerstrukturen, PHP_Dateien) und das Thema öffne mit den Umlauten bleibt das Beschreibungsfeld leer.
Statt mir Umlaute in einem Code oder sonst was anzuzeigen bleibt alles leer.

Wo liegt da das Problem ?

Danke schonmal für eure Hilfe :)
 
Typisches Encoding-Problem, wahlweise in deinen PHP-Scripten oder deiner Datenbank. UTF-8 muss halt konsistent durchgehalten werden, dann machen weder Umlaute noch Kanji-Zeichen oder kyrillische Buchstaben jemals ein Problem.
 
Die Datenbanken haben:
Server Zeichensatz: UTF-8 Unicode (utf8)

Und auch wenn ich den Quelltext so verändere:

$beschreib = $alles['Beschreibung'];
$beschreib = str_replace("nl2br","\n", $beschreib);
$beschreib = str_replace("&nbsp"," ", $beschreib);

echo nl2br(htmlentities($beschreib, ENT_QUOTES, "UTF-8"));

Also "UTF-8" einfügen bringt mich auch net weiter.

Kann es sein das ich in der php.ini was umstellen muss. Also da einen Zeichensatz ändern muss ?
 
Zuletzt bearbeitet:
Bin noch net so erfahren in PHP.

Ist so richtig ?

$beschreib = nl2br(htmlentities($beschreib, ENT_QUOTES, "UTF-8"));
$beschreib = utf8_encode($beschreib);
echo $beschreib;

Also so gehts leider auch net.
 
Versuche es mal so:

$beschreib = utf8_encode($alles['Beschreibung']);
$beschreib = str_replace("nl2br","\n", $beschreib);
$beschreib = str_replace("&nbsp"," ", $beschreib);

echo nl2br(htmlentities($beschreib, ENT_QUOTES));
 
Yeah :D

Thx sianon !

Klappt!
Danke an euch. Ihr seit einfach die besten hier ;)
 
du musst das Connection-Charset von MySQL noch auf UTF-8 stellen (SET NAMES 'utf-8'), das fehlt bei dir. Dann kannst du dir auch den utf8_encode sparen, denn die Daten aus deiner Db kommen aktuell als latin1 (iso-8859-1) an.

Das Verbindungscharset und das Charset zum Speichern der Daten sind nämlich 2 getrennte paar Schuhe ;)
 
In der my.ini ?

Da steht da dazu drinne:

## UTF 8 Settings
#init-connect=\'SET NAMES utf8\'
#collation_server=utf8_unicode_ci
#character_set_server=utf8
#skip-character-set-client-handshake
#character_sets-dir="C:/Users/coold_000/xampp/mysql/share/charsets"
 
normalerweise heißt # = auskommentiert....
Da du, außer auf komplett von dir verwalteten Maschinen, nie weißt wie ein Server tickt, solltest du immer beim Verbindungsaufbau als allererstes ein SET NAMES utf8 rausschicken.
 
MySQL Datenbank (CHARACTER SET)
MySQL Tabelle (CHARACTER SET)
PHP (.ini)
Apache (.conf)
Seite (meta)
All diesen muss man leider einzeln sagen dass sie UTf-8 zu verwenden haben. Die Standardeinstellungen sind selbstredend nicht immer und überall Gleich, soll ja keiner ohne die jeweiligen .conf's zu kennen loslegen ;)
Wie schon oben zu MySQL erwähnt, kann man an allen genannten Stellen die Zeichenkodierung zur Laufzeit anpassen.
Dann müssen die Sprachen mit lateinischem Alphabet i.d.R. nicht mehr en-/dekodiert werden.
 
Und dass die Datei mit dem Quellcode natürlich auch in UTF-8 kodiert sein muss.

Die HTML-Meta Angabe ist vernachlässigbar, da die nur darüber entscheidet, wenn die Datei direkt von der Platte im Browser dargestellt wird. Wenn ein Header mit ContentType/Charset ankommt, nimmt der Browser den (also praktisch immer).
 
ice-breaker schrieb:
Die MySQL-Verbindung fehlt in deiner Auflistung...
Das war mir nie Bewusst. Hast du einen Link für Näheres und vor Allem in welchem Kontext?

g0l3m schrieb:
Und dass die Datei mit dem Quellcode natürlich auch in UTF-8 kodiert sein muss.
...
Selbstverständlich...das war jetzt zu naheliegend, als das man da sofort drauf kommt ;)
 

Ähnliche Themen

Antworten
7
Aufrufe
5.966
A
Zurück
Oben