UTF8 String in einem ISO Script, € Zeichen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • UTF8 String in einem ISO Script, € Zeichen

    Leidiges Thema:

    Ich habe ein Script das selbst in Latin 9 codiert ist. Dieses Script lädt einen UTF8 String in dem Euro Zeichen drin sind. utf8_decode wandelt ja nur in Latin 1 um und kennt daher keine Eurozeichen. Kann ich nun vor dem utf8_decode irgendwie die Eurozeichen durch etwas anderes ersetzen, zum Beispiel __E__, dann könnte ich diesen String nach dem decode wieder durch das Eurozeichen ersetzen.

    Müsste vermutlich irgendwie auf die hexadezimalen Werte des UTF8 Strings matchen. Hat jemand ne Idee wie?

    Zur Lösung: Ich werde das Script nicht in UTF8 abspeichern, und ich möchte auch nichts anderes als utf8_decode verwenden.

    Vielen Dank schonmal im Vorraus.
    Zuletzt geändert von ppadde; 05.06.2009, 13:28.

  • #2
    Verwende iconv() statt utf8_decode().

    Kommentar


    • #3
      Um Kompatibilitätsprobleme zu vermeiden solltest du, wenn möglich (was eigentlich immer der Fall ist), auch keine Zeichen in deinem Script benutzen, die mehr als 7 bit benötigen. Dafür gibts ja z.B. HTML-Entities.

      Kommentar


      • #4
        Zitat von ppadde Beitrag anzeigen
        Ich werde das Script nicht in UTF8 abspeichern, und ich möchte auch nichts anderes als utf8_decode verwenden.
        PHP: utf8_decode - Manual

        Lies die User Kommentare.

        ansonsten. nimm iconv() wie h3ll schon sagte.
        Bitte Beachten.
        Foren-Regeln
        Danke

        Kommentar


        • #5
          Ich habe den Thread getrennt, da die Herren h3ll, jmc und combie ziemlich OT sind, also Leute hier geht es weite mit euren Diskussion http://www.php-resource.de/forum/php...hp-script.html

          Kommentar


          • #6
            Zitat von ppadde Beitrag anzeigen
            Leidiges Thema:

            Ich habe ein Script das selbst in Latin 9 codiert ist. Dieses Script lädt einen UTF8 String in dem Euro Zeichen drin sind. utf8_decode wandelt ja nur in Latin 1 um und kennt daher keine Eurozeichen. Kann ich nun vor dem utf8_decode irgendwie die Eurozeichen durch etwas anderes ersetzen, zum Beispiel __E__, dann könnte ich diesen String nach dem decode wieder durch das Eurozeichen ersetzen.

            Müsste vermutlich irgendwie auf die hexadezimalen Werte des UTF8 Strings matchen. Hat jemand ne Idee wie?

            Zur Lösung: Ich werde das Script nicht in UTF8 abspeichern, und ich möchte auch nichts anderes als utf8_decode verwenden.
            In welcher Kodierung dein PHP-Script verfasst wurde, hat dabei (fast) nichts zu sagen.

            PHP-Code:
            // Euro-Zeichen maskieren
            // \xe2\x82\xac ist UTF-8 von Unicode Codepoint  U+20ac
            $masked_utf strtr($utf, array ("\xe2\x82\xac" => '__EUR__'));
            $masked_iso utf8_decode($masked_utf);

            // Euros wieder einfügen
            // \xa4 ist ISO-8859-15 und ISO-8859-16
            // \x80 ist Windoze-Codepage 1252
            $iso strtr($masked_iso, array ('__EUR__' => "\xa4")); 
            Einfacher wäre es, statt __EUR__ gleich den ISO-Währungscode EUR oder die Named-Entity € einzusetzen, dann könntest du dir das mehrmalige Umkodieren ersparen. Das 3-Buchstaben-Kürzel bleibt im ASCII-Bereich, und ein Unicode-fähiger moderner Browser sollte kein Problem haben, für € das Euro-Zeichen darzustellen.
            Zuletzt geändert von fireweasel; 08.06.2009, 11:41.
            Klingon function calls do not have “parameters”‒they have “arguments”‒and they always win them!

            Kommentar


            • #7
              Die Lösung von Fireweasel sieht genau danach aus was ich gesucht habe.

              Vielen Dank

              Kommentar


              • #8
                Wenn du nicht an die Ursachen willst.....

                und ein Unicode-fähiger moderner Browser sollte kein Problem haben, für € das Euro-Zeichen darzustellen.
                Klar, Browser....
                Aber was ist mit Textmails, Ausgabe als Image oder PDF.


                Also wieder ein dirty Hack, weil die einfachsten Zeichensatz Grundlagen nicht verstanden wurden oder gar absichtlich nicht beachtet werden.
                Wir werden alle sterben

                Kommentar


                • #9
                  Zitat von combie Beitrag anzeigen
                  Also wieder ein dirty Hack, weil die einfachsten Zeichensatz Grundlagen nicht verstanden wurden oder gar absichtlich nicht beachtet werden.
                  Oder weil weitere nachfolgend verarbeitende Programme es nicht erlauben ander als mit so einem Hack zu einem passenden Ergebnis zu kommen? Nicht immer ist alles von einer Person anpassbar...

                  Kommentar


                  • #10
                    Zitat von combie Beitrag anzeigen
                    Wenn du nicht an die Ursachen willst.....

                    Klar, Browser....
                    Das galt selbstverständlich unter der (impliziten) Annahme, dass die Ausgaben des Scriptes am Ende in einem HTML-fähigen HTTP-Client landen. Bei PHP-Scripts dürfte das überdurchschnittlich häufig der Fall sein.

                    Aber was ist mit Textmails, Ausgabe als Image oder PDF.
                    Hängt davon ab, womit das Ganze weiterverarbeitet wird. Die PHP-Image-Funktionen (libgd) wie imagettftext() können mit "numeric coded resources" umgehen. Also könnte man da statt '€' eben '& #8364;'[1] verwenden. Die Fähigkeiten der PDF-Funktionen kenne ich nicht. Und für Text-Mails (oder generell für ASCII/ISO-Latin-1-Zeichensätze) wäre immer noch das von mir vorgeschlagene 'EUR' machbar.

                    Also wieder ein dirty Hack, weil die einfachsten Zeichensatz Grundlagen nicht verstanden wurden oder gar absichtlich nicht beachtet werden.
                    Der größte Teil der Software, die du verwendest (wie zum Beispiel dieses Board ;-) hier), basiert auf irgendwelchen (mal mehr mal weniger schmutzigen) Hacks, selbst so geniale Erfindungen wie UTF-8.

                    Wenn es sich nur um das Euro-Symbol handelt, halte ich das aber für (gerade noch) vertretbar.

                    [1] Schön, dass auch diese Board-Version eine kaputte Eingabevalidierung hat. Ich hatte eigentlich '&' und '#8364;' getippt. Herausgekommen ist ein schönes Euro-Symbol: '€'. Mal kucken ob das auch mit Hex-Werten geht: '€' ... nein, scheinbar nicht.
                    Zuletzt geändert von fireweasel; 12.06.2009, 16:43.
                    Klingon function calls do not have “parameters”‒they have “arguments”‒and they always win them!

                    Kommentar

                    Lädt...
                    X