Ankündigung

Einklappen
Keine Ankündigung bisher.

Suche utf8_encode() und utf8_decode() Ersatz

Einklappen

Neue Werbung 2019

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

  • Suche utf8_encode() und utf8_decode() Ersatz

    Hallo,

    ich habe ein Script in dem man, über Parameter gesteuert, strings vor der Ausgabe durch utf8_encode() bzw durch utf8_decode() leiten kann. Notwendig war das, weil auf unterschiedlichen Servern unterschiedlich verwendete Zeichensätze Probleme gemacht hatten. Aktuell mit php7 und Mariadb klappt das alles auch hervorragend.

    Nun fallen ja in absehbarer Zeit utf8_encode() bzw decode den Neuerungen von PHP8 zum Opfer, die Funktionen sind als dprecated markiert und ich suche nun nach einem identen Ersatz.
    Zu Testzwecken habe ich mir also eine Datenbank, die mit solchen "kaputten" Umlauten arbeitet, und mit der Funktion utf8_encode bzw utf8_decode korrekt angezeigt installiert. Dann habe ich versucht, in meiner Funktion, von utf8_encode auf mb_convert_encoding umzusteigen. Ich bekomme es nicht hin, dass die Daten ident kodiert werden und die Ausgabe korrekt ist.
    Die Daten sind lt. mb_detect_encoding() als ASCII codiert und utf8_encode() scheint das erfolgreich zu ignorieren, mb_convert_encoding aber scheinbar nicht.

    Damit kein Missverständnis aufkommt, Natürlich habe ich schon Stunden herum probiert und natürlich funktioniert das Script, wenn man mit einer komplett leeren Datenbank arbeitet auch mit Umlauten, ich versuche nur durch drohende Upgrades auf PHP8 die Funktionen vollwertig zu ersetzen. Ich möchte ein exportieren und erneutes importieren mit zwischenzeitlicher Konvertierung der Daten vermeiden, wir reden von zehntausenden Datensätzen.

    gruss sys

  • #2
    Ohne Beispielcode schwer zu sagen was du falsch machst. Und besser wäre es natürlich die Fehlerursache zu beheben anstatt einen Workaround durch einen anderen Workaround zu ersetzen. Zeit in sowas zu investieren macht wenig Sinn. Da kann man die Zeit gleich dafür verwenden das Problem zu lösen anstatt neue Probleme zu schaffen.

    Kommentar


    • #3
      Ich glaube Symfony hat ein Polyfill der Verwendet werden kann:
      https://github.com/symfony/polyfill/blob/main/README.md

      Polyfill: Wenn die Funktion existiert, wird die vorhandene genommen, ansonsten wird eine alternative Implementation genutzt.

      Kommentar


      • #4
        Zitat von sysop Beitrag anzeigen
        Die Daten sind lt. mb_detect_encoding() als ASCII codiert und utf8_encode() scheint das erfolgreich zu ignorieren.
        mb_detect_encoding() ist auch quatsch. Die Zeichensätze sind sich in der Regel viel zu ähnlich.

        Schau in die Anleitung was PHP mit utf8_encode/utf8_decode macht. Das ist ISO-8859-1 <-> UTF8 und das sieht mit mb_convert_encoding so aus:

        utf8_encode
        PHP-Code:
        mb_convert_encoding($value 'UTF8''ISO-8859-1'); 
        utf8_decode
        PHP-Code:
        mb_convert_encoding($value 'ISO-8859-1''UTF8'); 
        PS: ISO-8859-1 ist im Euro Raum nicht gebräuchlich, weil da das € Symbol fehlt. Standardmässig verwenden wir wenn dann ISO-8859-15.

        Kommentar


        • #5
          Ich würde mich gar nicht damit rumärgern, sondern stattdessen die Datenbankverbindung das regeln lassen (set names oder direkt im connection string je nach verwendeter Bibliothek)

          Wenn in der DB bereits "kaputte" daten drin stehen, unbedingt erstmal gerade rücken.

          Grüße

          Kommentar

          Lädt...
          X