htmlentities funktioniert nicht

Hallo,
ich bin am verzweifeln. Ich verstehe einfach nicht, warum dieser wahrlich simple code:
[php]

<?php $string="Chalupa äüö Amerika se nachází v Oderských vrších uprostřed lesů ..."; echo htmlentities($string); ?>[/php]

nicht funktioniert.
Der text wird ohne die entsprechenden entities ausgegeben.
Wo liegt der Fehler, der mich in den Wahnsinnn treiben könnte.
Danke schonmal für eure Hilfe
Grüße
ixam

Hi Ixam,

ist doch ganz logisch :slight_smile:

Er wandelt mit htmlentities, die Umlaute etc. in HTML konforme Entitäten um und gibt die umgewandelte Version aus. Bei der Ausgabe wird der HTML Text (die Tags etc.) geparst und vom Browser interpretiert. Da ist ein z.B.

&auml; = ä

Somit ist die Ausgabe doch korrekt.
Schau Dir doch mal den Quelltext an …

Hier mal als Test …
http://www.svenbartak.de/test.php

Ausgabe: Chalupa äüö Amerika se nachází v Oderských vrších uprostr(ed lesu*...

Quelltext:

Chalupa &auml;&uuml;&ouml; Amerika se nach&aacute;z&iacute; v Odersk&yacute;ch vrš&iacute;ch uprostr(ed lesu* ...

Hat doch alles geklappt o. verstehe ich das falsch.

Gruß Sven

Danke,
aber wirklich weiter gebracht hast du mich nicht, denn das Problem ist folgendes:
ich habe einen ungefähr 300 zeilen langen text, gespickt mit sonderzeichen, vor mir liegen.
Jetzt könnte ich natürlich alle sonderzeichen einzelnd per hand umwandeln, so wie du das gemacht hast. Das ist aber zu viel Arbeit und ich habe mir deshalb gedacht, das ich php das übernehmen lasse, aber so wie ich es versucht habe(siehe 1. Post) klappt es nicht. Die sonderzeichen werden nicht in die entsprechenden enitites umgewandelt. ä wird nicht zum ä .
So sieht die seite von oben bei mir aus:

MünchenChalupa äüö Amerika se nacházÃ* v Oderských

ich hoffe, du verstehst jetzt mein problem
danke trotzdem
ixam

PHP arbeitet in deinem Fall sicherlich richtig, und wenn du im Quelltext schaust, so wirst du auch die Entitäten sehen.

Wie bereits angeführt wandelt htmlentities() ein ä in ein ä. Wenn der Browser das anzeigt wandelt er es wieder in ein ä um, was den gewünschten Effekt erzielt, dass die Umlaute korrekt angezeigt werden.

Was du da siehst ist eine Fehleinstellung des Browser durch inkorrekte Angabe eines Encodings. Du musst dich entscheiden ob du dein Dokument in UTF-8 oder z.B. in ISO-8859-1 anzeigen willst (oder gar einer ganz anderen Kodierung).

Wenn du dich dafür entschieden hast, musst du deine Dokumente auch mit entsprechendem Encoding abspeichern und die korrekte Angabe im Meta-Bereich durchführen.

Um zu testen welche Kodierung du im Moment benutzt, geh in deinem Browser auf „Ansicht“->„Zeichenkodierung“ und probiere so lange aus, bis die Darstellung richtig ist.

Danke,
ich denke, wir sind dem ganzem jetzt auf der Spur. Ich habe jetzt sämtliche angebotenen Codierungsmöglichkeiten ohne Erfolg durchprobiert. Was soll ich jetzt tun?
ixam

DU hast es immernoch nicht verstanden, du kannst mit htmlentities, deine Sonderzeichen nicht umwandeln!

Außer es handelt sich hierbei um die bekannten, wie äöü usw…

@gollum1990
Sorry, das ich mich falsch ausgedrückt habe
Was htmlenteties macht habe das auch schon vorher gewusst.
Mit "codierungsmöglichkeiten " meine ich die von Frank angesprochenen encodings beim Browser.

Grüße
ixam

Das Problem liegt bereits am Encoding der Zeichenkette innerhalb von php
[PHP]
$string=„Chalupa äüö Amerika se nachází v Oderských vrších uprostřed lesů …“;
echo mb_detect_encoding($string);
[/PHP]
zeigt, dass bereits die Zeichenkette in UTF-8 kodiert ist.
Du musst also die Website auf UTF-8 stellen

<meta http-equiv="content-type" content="text/html; charset=utf-8">
Und die umwandlungsmethode anpassen
[PHP]htmlentities($string, ENT_QUOTES, „UTF-8“);[/PHP]

Oder wenn du nicht in utf-8 arbeiten möchtest, benutze
[PHP]mb_convert_encoding($string, „ISO-8859-1“, „UTF-8“)[/PHP] um den String in eine andere Kodierung (hier im Beispiel Iso-8859-1)umzuwandeln

Danke!
So gehts. Jetzt werden alle Zeichen wir im originaltext ausgegeben.
Allerdings habe ich jetzt folgendes problem:
[PHP]<?php $string="Überschrift
text"; echo htmlentities($string, ENT_QUOTES, "UTF-8"); ?>
[/PHP]
wird nicht so

Überschrift
text

sondern so

b>Überschrift
text

ausgegeben
an was liegts jetzt?
Grüße
ixam

Na, < und > werden durch htmlentities auch in < und > umgewandelt, so dass der HTML-Code nicht dargestellt wird, sondern einfach der Code angezeigt wird.

ganz einfach, htmlentities ersetzt die sonder zeichen, dazu gehört auch < und >
< wird zu < (less than, kleiner als) und > wird zu > (greater than, größer als). Dadurch hast du es nicht als html-ausgabe sondern du siehst die zeichen.

Du darfst dein html-code nicht durch htmlentities laufen lassen.

//zu lahm

Ah Danke. War doch logisch eigentlich logisch :oops:
Danke, das wars eigentlich. ich habe jetzt einfach bei jedem etc. ein extra echo gemacht.
Grüße
ixam