Ergebnis 1 bis 9 von 9

Thema: PHP-Befehl explode trennt falsch

  1. #1
    Contao-Urgestein Avatar von Samson1964
    Registriert seit
    05.11.2012.
    Ort
    Berlin
    Beiträge
    2.794

    Frage PHP-Befehl explode trennt falsch

    Vorgegeben sei dieser String:
    Code:
    4  ;Deutschland                   ;GER ; 9;102,0;8w4  ;2s2  ;1w1  ;3w2  ;=    ;10s3 ;9s4
    Mit
    PHP-Code:
    $spalte explode(';',$string
    trenne ich den String beim Semikolon. Heraus kommt aber das:
    Code:
    Array
    (
        [0] => 4  
        [1] => Deutschland                   
        [2] => GER 
        [3] =>  9
        [4] => 102,0
        [5] => 8w4  
        [6] => 2s2  
        [7] => 1w1  
        [8] => 3w2  
        [9] => =
        [10] =>     
        [11] => 10s3 
        [12] => 9s4
    )
    Ein Bug in explode (PHP 8, als auch 7)?
    Ich versuche es jetzt mal mit preg_split.

    EDIT: preg_split trennt auch falsch.
    Geändert von Samson1964 (28.11.2023 um 15:11 Uhr)
    Viele Grüße
    Frank

    Seit Mai 2013 Fan von Contao
    Webmaster vom Deutschen Schachbund und Berliner Schachverband
    Mein Blog: Schachbulle
    Meine Erweiterungen bei GitHub
    Meine Videos auf YouTube: Playlist zur Contao-Programmierung/Einrichtung

  2. #2
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.114
    Partner-ID
    10107

    Standard

    Was genau stimmt nicht?
    » sponsor me via GitHub or PayPal or Revolut

  3. #3
    Contao-Urgestein Avatar von Samson1964
    Registriert seit
    05.11.2012.
    Ort
    Berlin
    Beiträge
    2.794

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Was genau stimmt nicht?
    Getrennt wird auch am Gleichheitszeichen und es werden zwei Einträge erzeugt. Einmal mit Gleichheitszeichen und ein leerer Eintrag.
    Viele Grüße
    Frank

    Seit Mai 2013 Fan von Contao
    Webmaster vom Deutschen Schachbund und Berliner Schachverband
    Mein Blog: Schachbulle
    Meine Erweiterungen bei GitHub
    Meine Videos auf YouTube: Playlist zur Contao-Programmierung/Einrichtung

  4. #4
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.719
    User beschenken
    Wunschliste

    Standard

    Liste hat 12 Elemente und Array 13 - Key 10 ist zu viel ... oder?

  5. #5
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.114
    Partner-ID
    10107

    Standard

    Kann ich nicht nachvollziehen: https://3v4l.org/b51gv
    » sponsor me via GitHub or PayPal or Revolut

  6. #6
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.719
    User beschenken
    Wunschliste

    Standard

    PHP-Code:
    $spalte array_filter(explode(';',$string)); 
    ?

  7. #7
    Contao-Urgestein Avatar von Samson1964
    Registriert seit
    05.11.2012.
    Ort
    Berlin
    Beiträge
    2.794

    Standard

    Ich konnte es auf https://onlinephp.io/ auch nicht nachvollziehen. Vielleicht ein Problem, weil der String als UTF8 aus der Datenbank kommt. Muß ich genauer untersuchen.
    Viele Grüße
    Frank

    Seit Mai 2013 Fan von Contao
    Webmaster vom Deutschen Schachbund und Berliner Schachverband
    Mein Blog: Schachbulle
    Meine Erweiterungen bei GitHub
    Meine Videos auf YouTube: Playlist zur Contao-Programmierung/Einrichtung

  8. #8
    Contao-Urgestein Avatar von Samson1964
    Registriert seit
    05.11.2012.
    Ort
    Berlin
    Beiträge
    2.794

    Standard

    Ich habe mir den String jetzt mal mit der ord-Funktion ausgeben lassen:
    Code:
    Byte w2 ;= ;10s3 ;9s4 an 68 des Strings hat den Wert 119
    Byte 2 ;= ;10s3 ;9s4 an 69 des Strings hat den Wert 50
    Byte ;= ;10s3 ;9s4 an 70 des Strings hat den Wert 32
    Byte ;= ;10s3 ;9s4 an 71 des Strings hat den Wert 32
    Byte ;= ;10s3 ;9s4 an 72 des Strings hat den Wert 59
    Byte = ;10s3 ;9s4 an 73 des Strings hat den Wert 38
    Byte #61; ;10s3 ;9s4 an 74 des Strings hat den Wert 35
    Byte 61; ;10s3 ;9s4 an 75 des Strings hat den Wert 54
    Byte 1; ;10s3 ;9s4 an 76 des Strings hat den Wert 49
    Byte ; ;10s3 ;9s4 an 77 des Strings hat den Wert 59
    Byte ;10s3 ;9s4 an 78 des Strings hat den Wert 32
    Zwischen ";= ;10s3" taucht plötzlich phantomhaft "#61;" auf. Da verstecken sich unsichtbare Zeichen im String. Wie sind die da hingekommen?!

    Ich habe direkt in der Datenbank geschaut. phpMyAdmin zeigt mir an:
    Code:
    4  ;Deutschland                   ;GER ; 9;102,0;8w4  ;2s2  ;1w1  ;3w2  ;=    ;10s3 ;9s4
    So langsam kommt Licht in das Dunkel.
    Beim Einfügen des Strings in eine CSV-Textarea meiner Erweiterung steht noch ein = im String. Daraus macht Contao die HTML-Entity und speichert diese in der Datenbank. Wenn der Wert wieder ausgelesen wird, bekommt explode die HTML-Entity zu fressen. Meine Lösung wäre jetzt die HTML-Entities vor der Verwendung von explode zu konvertieren.

    Danke nochmal für die Hilfe. PHP spinnt also doch nicht.
    Viele Grüße
    Frank

    Seit Mai 2013 Fan von Contao
    Webmaster vom Deutschen Schachbund und Berliner Schachverband
    Mein Blog: Schachbulle
    Meine Erweiterungen bei GitHub
    Meine Videos auf YouTube: Playlist zur Contao-Programmierung/Einrichtung

  9. #9
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.114
    Partner-ID
    10107

    Standard

    Contao nutzt Input Encoding. Wenn du also über das Contao Backend eingegebene Daten manuell dann in deinem PHP Code aus der Datenbank holst, musst du diese Entities auch immer selbst decoden (je nach dem was du brauchst).
    » sponsor me via GitHub or PayPal or Revolut

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •