Tom123: UTF-8 Hex in PHP String

Hallo,
wie kann man in PHP ein UTF-8 Zeichen (vierstelliger Hexadezimalwert) in einem String notieren. Habe schon verschiedene Möglichkeiten ausprobiert, leider ohne Erfolg.

Abgesehen davon habe ich gelesen, dass man UTF-8 Zeichen in PCRE mit \x{1234} definieren kann. Geht bei mir leider auch nicht.

Was macht Ihr mit UTF-8 und einzelnen Zeichen? Was mache ich falsch?

Grüße
Tom123

  1. Hello,

    wie kann man in PHP ein UTF-8 Zeichen (vierstelliger Hexadezimalwert) in einem String notieren. Habe schon verschiedene Möglichkeiten ausprobiert, leider ohne Erfolg.

    Zunächst mal muss sich darüber klar werden, dass PHP Bytes sieht.
    Erst Browser und Screen (Device + Monitor) wandeln die vier Bytes in das entsprechende Pixelbild des Zeichens.

    Willst Du also verhindern, die vir Zeichen wandeln zu lassen, müsstest Du sie aus dem Stream herausnehmen, da dieser ja gesamtheitlich als UTF-8 dargestellt wird.

    Du müsstest Dir also mittels einer mb_funktion das Zeichen (aus x bytes) herauspicken in eine Variable, und diese dann Byteweise anzeigen lassen.

    $zeichen = mb_substr($utf8_string, $offset, $length, 'utf-8');

    $len = strlen($zeichen);   ## Die Länge des Strings als single-byte-codiertes Zeichen ermitteln;
        echo $len;

    for ($i=0; $i<$len; $i++)
        {
            echo ord($zeichen[$i]),' ';
        }

    So müsste es klappen...

    Du hättest die Ordnungszahl jedes einzelnen Bytes eines Multibyte-Zeichens

    Liebe Grüße aus Syburg bei Dortmund

    Tom vom Berg

    --
    Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
    1. Irgendwie kann ich mit deiner Antwort leider nichts anfangen. Eigentlich wollte ich ein Zeichen anhand einer Hexadezimalzahl (Unicode) in einen String schreiben, z.B. echo "Hallo U+2192 ...". Nur bekomme ich das nicht hin. Mir ist nicht klar, wie das Unicode Zeichen mit dem Hex 2192 in einem String notiert wird. Je nach Programmiersprache gibt es ja viele Möglichkeiten, z.B. \x2192 oder U+2192 ...

      Wie geht das in PHP?

      1. Hello,

        Irgendwie kann ich mit deiner Antwort leider nichts anfangen.

        Hast Du sie denn ausprobiert?
        Ich mach das jetzt auch mal eben...

        Liebe Grüße aus Syburg bei Dortmund

        Tom vom Berg

        --
        Nur selber lernen macht schlau
        http://bergpost.annerschbarrich.de
        1. Wenn ich dein Script richtig verstehe, dann extrahierst du ein Zeichen aus einem String. Das möchte ich aber nicht. Sonder es soll in den String und ich kenne nur den UTF-8 Hex-Wert. Also basierend auf einem Unicode-Hex-Wert soll das Zeichen erzeugt werden. Damit man es z.B. in einer Zeichenmenge in einem regulären Ausdruck verwenden kann.

          Grüße
          Tom123

          1. Hello,

            erstmal schnell die kleine Bastelei, sie ist so lauffähig:

            <?php   ### get_utf8_code.php ###

            ##############################################################
                ## This Script must be saved with your editor in utf-8 code ##
                ##############################################################

            $string = "Änderungen älterer Ölsardinen nur in der Örtlichkeit über die die Straße gegenüber";
                $code = '';

            $len = mb_strlen($string,'utf-8');

            for ($i = 0; $i < $len; $i++)
                {
                    $utf8_str = mb_substr($string,$i,1,'utf-8');

            $utf8len = strlen($utf8_str);

            for ($k = 0; $k < $utf8len; $k++)
                    {
                       $code.= dechex(ord($utf8_str[$k])).' ';
                    }
                    $code.= '| ';
                }
            ?>

            <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
            <HTML>
            <HEAD>
              <TITLE>UTF-8 Code ausgeben</TITLE>

            <meta http-equiv="content-type" content="text/html; charset=utf-8">

            </HEAD>

            <BODY>

            <?php
                echo "$string <br>\r\n";
                echo "$code   <br>\r\n";
            ?>

            </body>
            </html>

            <!-- Ende -->

            Wenn ich dein Script richtig verstehe, dann extrahierst du ein Zeichen aus einem String. Das möchte ich aber nicht. Sonder es soll in den String und ich kenne nur den UTF-8 Hex-Wert. Also basierend auf einem Unicode-Hex-Wert soll das Zeichen erzeugt werden. Damit man es z.B. in einer Zeichenmenge in einem regulären Ausdruck verwenden kann.

            Soll dies dynamisch während der Laufzeit passieren, oder willst Du die Zeichen mit dem Editor ersetzen?

            Liebe Grüße aus Syburg bei Dortmund

            Tom vom Berg

            --
            Nur selber lernen macht schlau
            http://bergpost.annerschbarrich.de
            1. Hallo Tom,
              die Zeichen möchte ich im Editor einsetzen. Mir geht es eigentlich nur darum, wie man PHP sagt "Das Zeichen 5 im String soll ein UTF-8 Zeichen mit dem Hex-Wert 2192 sein."
              Da muss es doch eine Möglichkeit geben, wie bei den Zeilenumbrüchen mit \n.
              Ich weiß, dass die UTF-8 Unterstützung in PHP in Version 5 noch schlecht ist.

              Das Script ist natürlich UTF-8 ;)

              Grüße
              Tom123

              1. Hallo,

                die Zeichen möchte ich im Editor einsetzen. Mir geht es eigentlich nur darum, wie man PHP sagt "Das Zeichen 5 im String soll ein UTF-8 Zeichen mit dem Hex-Wert 2192 sein."
                [...]
                Das Script ist natürlich UTF-8 ;)

                und warum schreibst du die Zeichen dann nicht einfach im Klartext in den Quellcode? Okay, PHP "sieht" dann für dieses eine Zeichen zwei oder gar drei Bytes, aber das wäre ja egal.

                So long,
                 Martin

                --
                Ich bin im Prüfungsstress, ich darf Scheiße sagen.
                  (Hopsel)
                1. Das geht leider nicht immer. Gerade in regulären Ausdrücken gibt es da Probleme. Gibt's denn keine Syntax zum Einfügen eines UTF-8 Zeichens per Hex-Wert in einen UTF-8 String? So primitiv kann PHP < 6 doch nicht sein.

                  1. Moin!

                    Das geht leider nicht immer. Gerade in regulären Ausdrücken gibt es da Probleme. Gibt's denn keine Syntax zum Einfügen eines UTF-8 Zeichens per Hex-Wert in einen UTF-8 String? So primitiv kann PHP < 6 doch nicht sein.

                    Doch, ist es. Unicode in regulären Ausdrücken erfordert immer irgendeine Sonderbehandlung - abhängig von der Funktion, die verwendet wird.

                    UTF-8-Zeichen sind in PHP-Strings immer eine Aneinanderreihung eines oder mehrerer Bytes. Dementsprechend funktioniert beispielsweise sowas als Regex nicht einfach: "[a-zäöüß]". Für preg_*-Funktionen gibt es aber beispielsweise den Modifikator u, der Suchmuster als UTF-8 behandelt. Außerdem ist in diesem Modus der Pattern \x{FFFF} möglich, um den Unicode-Codepoint hexadezimal anzugeben - aber eben NUR im regulären Ausdruck, nicht allgemein in allen Strings.

                    Alternativ existiert auch mb_ereg().

                    - Sven Rautenberg

                    --
                    "Love your nation - respect the others."
                    1. Hi Sven,

                      schade, hätte gehofft, dass es da eine Möglichkeit in PHP - mal sehen was PHP 6 bringt.
                      Bei den PCRE hatte ich wohl dann den Modifikator vergessen.

                      Danke an alle für die Antworten.

                      Grüße
                      Tom123

                      1. echo $begrüßung;

                        schade, hätte gehofft, dass es da eine Möglichkeit in PHP -

                        Da Unicode erst mit Version 6 zur Verfügung steht, gibt es derzeit auch keine allgemeingültige Möglichkeit, ein Unicode-Zeichen in einem String zu notieren.

                        mal sehen was PHP 6 bringt.

                        Das lässt schon so lange auf sich warten und ein Erscheinungsdatum ist noch nicht in Sicht. Ich würde derzeit noch nicht konkret auf die PHP-6-Features hoffen.

                        echo "$verabschiedung $name";

          2. Moin!

            Wenn ich dein Script richtig verstehe, dann extrahierst du ein Zeichen aus einem String. Das möchte ich aber nicht. Sonder es soll in den String und ich kenne nur den UTF-8 Hex-Wert. Also basierend auf einem Unicode-Hex-Wert soll das Zeichen erzeugt werden. Damit man es z.B. in einer Zeichenmenge in einem regulären Ausdruck verwenden kann.

            PHP hat keine standardmäßige Methode zur Escape-Notation eines Unicodezeichens, weil PHP intern keinen UTF-8-Modus kennt (gilt zumindest für alles vor Version 6.0).

            Manche spezielle Funktionen erlauben eventuell eine eigenständige escapte UTF-8-Notation. Das stünde dann allerdings in der jeweiligen Funktionsdokumentation.

            Der simpelste Weg, ein UTF-8-Zeichen in einen PHP-String zu bekommen:

            $str = "€";
            und abspeichern als UTF-8-codierte Datei.

            - Sven Rautenberg

            --
            "Love your nation - respect the others."