[Funktion] Hexadezimale UTF- 8 in dezimale umwandeln

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

  • [Funktion] Hexadezimale UTF- 8 in dezimale umwandeln

    Hallo allerseits,

    gibt es eine Möglichkeit (z.B. eine PHP-Funktion), einen hexadezimalen Unicode in einen dezimalen umzuwandeln?

    Also so wie hier: Hier klicken

    In der rechten Spalte steht jeweils das hexadezimale und in der linken die dezimale Entsprechung.


    Nun möchte ich in einem PHP-Script in einer Datenbank suchen und zwar nicht nur nach Einträgen, die im hexadezimalen Format gespeichert sind, sondern auch im dezimalen. Denn leider sind die Daten allesamt verschieden gespeichert worden.

    Ich bräuchte also ungefähr folgendes:
    SELECT irgendwas FROM tabelle WHERE daten = sucheingabe

    und dann:

    $umgewandelte_Suchanfrage = Funktion_für_die_Umwandlung(sucheingabe);

    und dann eine erneute Datenbankabfrage, bei der nach der umgewandelten Suchanfrage gesucht wird.

    Gibt es da irgendeine Möglichkeit?


    Gruß,

    Muckellein

  • #2
    Manual kapputt?
    http://ch2.php.net/manual/de/function.hexdec.php
    Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

    [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
    Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

    Kommentar


    • #3
      Danke erstmal,

      aber ich meine es nicht so.

      Sondern:

      Ich habe: & #x03C0;& #x03BF;& #x03BD;& #x03C4;& #x03AF;& #x03BA;& #x03B9; (jeweils ohne das Leerzeichen hinter dem &)

      So und das möchte ich jetzt umwandeln in irgendsowas: & #916;& #913;& #924;& #967;& #934;& #945;& #915; (wieder ohne Leerzeichen)

      Beide werden im Browser gleich angezeigt, nämlich so: ποντίκι

      Wie kann ich das obere umformen, so dass es zum unteren wird. Mit hexdec() erhalte ich sowas: 7.6060195391209E+31


      PS: Guckt euch mal die Tabelle hier an. Da steht in der rechten Spalte hexadez. und in der linken dezimal. Und ich möchte sozusagen von der rechten in die linke konvertieren.
      Kann es sein, dass der Begriff hexadezimal in der Tabelle überhaupt nicht stimmt?


      Gruß,

      Muckellein
      Zuletzt geändert von Muckellein; 02.06.2008, 17:37.

      Kommentar


      • #4
        http://de3.php.net/manual/de/function.preg-replace.php
        und
        Code:
        !\&\#x([0-9A-F]+);!i
        sind dir bei dieser Aufgabe gerne behilflich.

        Kommentar


        • #5
          Mit hexdec() erhalte ich sowas: 7.6060195391209E+31
          Also wenn das 03C0 (Hex) deine obige Zahl in Dezimal System gibt, dann gute Nacht.
          Du hast nicht zufällig das Ampersand, die Raute, und das x mit übergeben?
          Ich nehme jetzt das erste Bsp auf der von dir verlinkten Seite und gebe das in den Win Taschenrechner als Hex ein und klicke auf Dec. Et voilà genau der angegebene Wert auf der Seite, der unter dezimal steht.
          Wenn du die richtigen Werte eingibst, dann klappt das auch mit hexdec(). Ampersand und Raute haben nix mit der hexadezimalen Zahl an sich zu tun. Auch das x ist eher eine Markierung für 'Achtung hier kommt hexadezimal'

          Gruss

          tobi

          @Baker
          Würde gleich preg_replace_callback() verwenden. Dann kann die Callbackfunktion die bei jedem Treffer den Hexwert übergeben bekommt gleich den dezimalen Wert als Ersetzung zurückgeben.
          Zuletzt geändert von jahlives; 02.06.2008, 20:31.
          Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

          [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
          Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

          Kommentar


          • #6
            Vielen Dank,

            habe ich das jetzt richtig verstanden, dass mit dem preg_replace erst einmal die # und x entfernt werden?
            Habe folgendes versucht:
            PHP-Code:
            $suchmuster '!\&\#x([0-9A-F]+);!i';
            $test "ποντίκι"
             
            $ersetzung "";  $erweitert preg_replace($suchmuster$ersetzung$test);  $ergebnis hexdec($erweitert); 
            Jedoch weiß ich nicht, was bei $ersetzung reinkommt, denn im Prinzip soll er ja gar nix ersetzen?

            Hoffe, mir kann nochmal jemand helfen.

            Danke im Vorraus
            Zuletzt geändert von jahlives; 03.06.2008, 15:18.

            Kommentar


            • #7
              habe ich das jetzt richtig verstanden, dass mit dem preg_replace erst einmal die # und x entfernt werden?
              Meine Bemerkung an Baker ist eigentlich schon die Lösung
              PHP-Code:
              function callback($wert){
                return 
              '&#'.hexdec($wert[1]);
              }
              $str preg_replace_callback('/&#x([0-9A-F]+)/i',"callback",$deinString); 
              zu sehen bei http://wiki.tobisworld.ch/index.php?title=Hex_nach_Dec

              Gruss

              tobi
              Zuletzt geändert von jahlives; 04.06.2008, 15:14.
              Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

              [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
              Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

              Kommentar


              • #8
                Ok, vielen Dank.


                Letzte Frage: Geht es auch andersrum, also von dezimal in hexadezimal?


                Gruß,

                Muckellein

                Kommentar


                • #9
                  Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                  [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                  Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                  Kommentar


                  • #10
                    Ok, danke!
                    Das funktioniert soweit. Aber bei der Datenbank scheitere ich jetzt:

                    PHP-Code:
                    $suchmuster '!\&\#x([0-9A-F]+);!i';  
                    $name "&#x";  
                    $sql2 "SELECT  griechisch FROM words WHERE  griechisch like '%".mysql_real_escape_string($name)."%'";       
                    $result2 mysql_query ($sql2);  
                    while (
                    $data mysql_fetch_array($result2))  { 
                      function 
                    callback($suchmuster){    return 
                    '&#x'.dechex($suchmuster[1]);
                    }  
                    $str preg_replace_callback('/&#([0-9A-F]+)/
                    i'
                    ,"callback",$data["griechisch"]);
                    $aendern1 "UPDATE words Set griechisch = '".$str."'    WHERE 
                    griechisch = '"
                    .$data["griechisch"]."'";    $eintragend1 mysql_query($aendern1);  

                    Ergibt die Meldung: Cannot redeclare callback() (previously declared


                    Wieso kann er die Funktion callback nicht mehrmals ausführen?
                    Zuletzt geändert von jahlives; 03.06.2008, 15:20.

                    Kommentar


                    • #11
                      Diese Code-Formatierung ist nicht dein Ernst, oder?

                      Zu deiner Frage: Es heisst, dass er die Funktion callback() nicht mehrmals deklarieren kann. Mit Ausführen hat das nichts zu tun. Das bedeutet einfach du hast diese Funktion (oder eine andere mit dem gleichen Namen) irgendwo in deinem Code bereits definiert.

                      Grüße
                      Nieder mit der Camel Case-Konvention

                      Kommentar


                      • #12
                        Sorry, die Codeformatierung habe ich nicht so gemacht...

                        ich habe den kompletten Code unten hingeschrieben. Die Funktion wurde ansonsten nirgendwo definiert.

                        Kommentar


                        • #13
                          Erstmal machst du mal Zeilenumbrüche in deine Codes. Kann ja kein Schwein lesen. Dann wieso definierst du eine Funktion innerhalb einer Schleife? Spätestens beim 2. Durchlauf kommt diese Fehlermeldung. Hast du überhaupt eine Ahnung was du da machst
                          Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                          [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                          Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                          Kommentar


                          • #14
                            Original geschrieben von Muckellein
                            Sorry, die Codeformatierung habe ich nicht so gemacht...

                            ich habe den kompletten Code unten hingeschrieben. Die Funktion wurde ansonsten nirgendwo definiert.
                            Das heisst aber nicht, dass du den Code nicht selbst gemäß den Regeln so umbrechen kannst, dass keine Überbreite entsteht.

                            Dann solltest du auch sehen, dass du die callback Funktion in einer Schleife definierst, die dann - natürlich - in jedem Durchlauf neu zu definieren versucht wird.
                            Nieder mit der Camel Case-Konvention

                            Kommentar


                            • #15
                              Kannst du mir da einen Tipp geben wie man das macht?

                              Habe das
                              PHP-Code:
                              function callback($suchmuster){    return '&#x'.dechex($suchmuster[1]);  } 
                              vor die While-Schleife gesetzt. Ist aber falsch, oder? Weil das $suchmuster[1] ja immer gleich bleibt. Wie würde man das machen, soll die Schleife innerhalb der While-Schleife sein?

                              Habe das Script wie oben beschrieben gerade im Browser geöffnet und jetzt macht der seit über 5 Minuten irgendwas. Das problem ist halt, dass es 25000 Datensätze sind und das dann wahrscheinlich lange dauern wird.

                              Kommentar

                              Lädt...
                              X