Mr. T: problem mit kodierung per htmlentites()

Hallöchen!

Ich will mit PHP die Ergebnisse einer Suche ausgeben und da in den Suchergebnissen häufig Umlaute vorkommen wollte ich diese mit der Funktion htmlentities() erstmal kodieren, damit sie dann richtig angezeigt werden.

Nun das Problem:
htmlentities gibt mir aber zB. "Böhmen" statt "Böhmen" zurück

demnach müsste der String ja vor der Umwandlung etwa so lauten: Böhmen
wenn ich mir allerdings ein Array per print_r ausgeben lasse ist alles ganz normal

hab ich die Methode irgendwie falsch verstanden oder woran liegt das?

  1. Mahlzeit Mr. T,

    Ich will mit PHP die Ergebnisse einer Suche ausgeben und da in den Suchergebnissen häufig Umlaute vorkommen wollte ich diese mit der Funktion htmlentities() erstmal kodieren, damit sie dann richtig angezeigt werden.

    Warum? Wieso nutzt Du nicht eine passende Zeichencodierung, die mit allen erdenklichen Zeichen umgehen bzw. diese darstellen kann (wie z.B. UTF-8)?

    Nun das Problem:
    htmlentities gibt mir aber zB. "Böhmen" statt "Böhmen" zurück

    demnach müsste der String ja vor der Umwandlung etwa so lauten: Böhmen

    Aha - anscheinend benutzt bereits *IRGENDETWAS* UTF-8 ... ich würde Dir empfehlen, sämtliche Dateien darauf umzustellen und den Code dahingehend zu überarbeiten, dass UTF-8-codierte Strings verarbeitet werden können.

    MfG,
    EKKi

    --
    sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
    1. Aha - anscheinend benutzt bereits *IRGENDETWAS* UTF-8 ... ich würde Dir empfehlen, sämtliche Dateien darauf umzustellen und den Code dahingehend zu überarbeiten, dass UTF-8-codierte Strings verarbeitet werden können.

      Problem hat sich gelöst.
      Habe mich vertippt (UTF8 statt UTF-8)

      Jedefalls danke!!

  2. Moin

    demnach müsste der String ja vor der Umwandlung etwa so lauten: Böhmen
    wenn ich mir allerdings ein Array per print_r ausgeben lasse ist alles ganz normal

    Du solltest dich mit Zeichenkodierungen beschäftigen. Böhmen scheint UTF8 codiert zu sein. Wenn du deiner Seit eim Header utf-8 Codierung verpasst müsste die Ausgabe korrekt sein. Dann benötigst du keine Funktion htmlentities(), sondern nur htmlspecialchars()...

    Wenn du wirklich mit htmlentities ausgeben willst musst du den String vorher decodieren. ungefähr so: htmlentities(utf8_decode($string))

    Gruß Bobby

    --
    -> Für jedes Problem gibt es eine Lösung, die einfach, sauber und falsch ist! <-
    ### Henry L. Mencken ###
    -> Nicht das Problem macht die Schwierigkeiten, sondern unsere Sichtweise! <-
    ## Viktor Frankl ###
    ie:{ br:> fl:{ va:} ls:< fo:) rl:( n4:( de:> ss:) ch:? js:( mo:} sh:) zu:)
    1. Hi!

      Wenn du wirklich mit htmlentities ausgeben willst musst du den String vorher decodieren. ungefähr so: htmlentities(utf8_decode($string))

      Nein, muss man nicht, htmlentities() kennt einen charset-Parameter, den man mit 'UTF-8' füttern kann. Das Umkodieren wäre auch kontraproduktiv, denn dann könnte man ja gleich bei ISO-8859-1 bleiben, denn alles andere geht bei utf8_decode() verloren.

      Lo!

  3. Hi,

    Nun das Problem:
    htmlentities gibt mir aber zB. "B&Atilde;&para;hmen" statt "B&ouml;hmen" zurück

    Bist Du sicher, htmlentities iso-latin codierte strings zu übergeben? Oder kommen die möglicherweise utf-8 codiert aus der Datenbank?

    Aber wozu das? Wenn Deine Datei in Iso-Latin abgespeichert ist, und das Html als derart codierte Datei ausgeliefert wird, brauchts das nicht.

    Gruesse, Joachim

    --
    Am Ende wird alles gut.