Encoden von Umlauten (ä -> &auml;), nicht von HTML-Code (<,> etc.)

  • PHP

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von BjöNi.

    Encoden von Umlauten (ä -> &auml;), nicht von HTML-Code (<,> etc.)

    Hallo,
    ich habe einen String, der folgendermaßen aussehen kann:

    PHP-Quellcode

    1. $foo = 'Dies ist ein Text mit vielen Ümläüten, wie z.B. ö, der aber auch <b>HTML-Codes</b> enthalten kann.';
    Nun möchte ich als Ausgabe
    Dies ist ein Text mit vielen Ümläüten, wie z.B. ö, der aber auch HTML-Codes enthalten kann.
    , also als Code

    HTML-Quellcode

    1. Dies ist ein Text mit vielen &Uuml;ml&auml;&uuml;ten, wie z.B. &ouml;, der aber auch <b>HTML-Codes</b> enthalten kann.
    . Bei

    PHP-Quellcode

    1. echo $foo;
    erhalte ich logischerweise unter Umständen eine verranzte Anzeige der Umlaute, also dachte ich,

    PHP-Quellcode

    1. echo htmlentities($foo);
    zu verwenden. Da kommt nun aber
    Dies ist ein Text mit vielen Ümläüten, wie z.B. ö, der aber auch <b>HTML-Codes</b> enthalten kann.
    , als Code also

    HTML-Quellcode

    1. Dies ist ein Text mit vielen &Uuml;ml&auml;&uuml;ten, wie z.B. &ouml;, der aber auch &lt;b&gt;HTML-Codes&lt;/b&gt; enthalten kann.
    . Auch logisch, da '<' und '>' ja auch codiert werden.
    Inzwischen habe ich es folgendermaßen hinbekommen:

    PHP-Quellcode

    1. echo htmlspecialchars_decode(htmlentities($foo));
    Ich denke aber, dass das keine besonders schöne Variante ist, da ja zunächst alle Zeichen (inkl. HTML-Codes) kodiert werden und anschließend die nicht benötigten wieder dekodiert werden.
    Weiß da jemand eine schönere Lösung für dieses Problem?
    Gruß, BjöNi :)

    BjöNi schrieb:

    ...Bei

    PHP-Quellcode

    1. echo $foo;
    erhalte ich logischerweise unter Umständen eine verranzte Anzeige der Umlaute...
    finde ich nicht "logisch" ... nutz einfach das richtige encoding

    Quellcode

    1. header('Content-type: ?/?; charset=utf-8');
    oder

    Quellcode

    1. <meta http-equiv="Content-Type" content="?/?; charset=utf-8"/>
    die fragezeichen musst du noch mit deinem entsprechenden content-type ersetzten und dein problem ist gelöst
    Naja ok danke, aber ich habe letzten Endes keinen Zugriff auf den Header / die Meta-Angabe (Sprich: Es könnte auch ANSI-Codiert sein), insofern sehe ich eigentlich keinen anderen Weg als die

    Samus Aran schrieb:

    ranzigen HTML-Umlautersatzcodes
    :(

    Wenn es keinen Anderen Weg gibt ists auch egal, es funktioniert ja und die Performanceprobleme halten sich bei einem String, der zwei mal umgewandelt wird, in Grenzen ;).
    Naja, und wie siehts mit é,É,í,Í,ú,Ú,ó,Ó,è,È,ì,Ì,ù,Ù,ò,Ò,ê,Ê,î,Î,û,Û,ô,Ô,ß etc. aus? Ich glaube, da ist der Performanceverlust bei allen Aufrufen zusammen geringer als ich jetzt brauche, um das alles hinzuschreiben ;)

    Ich lasse es jetzt einfach so.
    Ein PerformanceVERLUST entsteht mMn nicht, das Ersetzen braucht nicht wirklich viel Speicher / whatever.
    Die restlichen Zeichen werden wohl nicht oft genutzt werden, trotzdem kannst Du sie noch erweitern, das Muster sollte ja wohl klar sein.
    Das Muster ist mir klar, und zur Not wüsste ich auch php.net zu verwenden...

    Ich meinte, dass der Performanceverlust, wenn ich nicht die Replace-Funktion nehme, geringer als die Gesamtdauer, die ich zum Schreiben der Replace-Funktion brauche, ist ;)
    Ja ach nee... Trotzdem muss ich es 1x schreiben! Und das ist mir, wenn ich eiglich alle nicht in ANSI vorhandenen Sonderzeichen abdecken will, zu viel arbeit.