1. #1

    Registered
    28/04/03
    Location
    Lier
    Posts
    266
    iTrader
    1 (100%)
    Mentioned
    0 Post(s)
    Reputation
    0/0

    character encoding issue

    Ik heb een php scriptje dat data uit een csv file moet lezen, dit is een lijntje uit de csv file:

    20152,Testuser,,Test,,NL,,test@test.be,,2,55,2,9,T estshop,5,,P+,

    De data wordt opgehaald via file_get_contents en vervolgens gesplitst met explode op het ',' teken. Deze data wordt vervolgens in een database geïmporteerd.

    Maar als ik via phpMyAdmin naar de database kijk, zie ik tussen elke letter een ? karakter staan: T�e�s�t�u�s�e�r�

    Als ik deze data wil exporteren naar een nieuwe csv file, komt die er als volgt uit:
    20152,Testuser,Test䈬䙅ⱒ琀攀猀琀䀀琀攀猀琀⸀戀攀Ⰰ敄慣桴潬琀攀猀琀猀栀漀瀀⸀Ⰰ ੭

    Ik heb al vanalle dingen geprobeerd met iconv en mb_internal_encoding enzo, maar nog geen succes gehad.

    Ik heb wel gemerkt dat ik deze issue alleen heb als ik met de file werk die mij werd aangeleverd. Als ik de content van de aangeleverde file kopieer naar een nieuwe file, en deze importeer, dan krijg ik de rare karakters niet.

    Zou het kunnen dat er iets van metadata / headers aan de aangeleverde file verbonden zijn die ervoor zorgen dat php de file niet correct leest? Zoja, hoe kan ik dit omzeilen/fixen?
    no votes  

  2. #2
    dJeez's Avatar
    Registered
    17/07/02
    Location
    Sol System
    Posts
    10,064
    iTrader
    1 (100%)
    Mentioned
    0 Post(s)
    Reputation
    27/78
    Check eerst eens met een deftige text editor in welk formaat de CSV staat (met Notepad++ kan je dat snel checken dacht ik, ervan uitgaande dat je Windows gebruikt).
    PSN: dJeezBE - Delicious bookmarks
    Disclaimer: I am currently suffering from severe CSD (Compulsive Sarcasm Disorder). - L'onion fait la farce - Facile largire de alieno
    Pastafarian by choice
    no votes  

  3. #3

    Registered
    28/04/03
    Location
    Lier
    Posts
    266
    iTrader
    1 (100%)
    Mentioned
    0 Post(s)
    Reputation
    0/0
    Ik had al verschillende conversions geprobeerd tussen de verschillende character sets, maar nooit echt gezien welke character set gebruikt werd in het bestand zelf. Volgens Notepad++ gaat het om UCS-2, wat volgens mij betekent dat ik de multibyte functies van php moet gebruiken (mbstring).

    Ik heb dit getest en mijn database table collation op 'ucs2_bin' gezet, zonder resultaat.

    Hieronder een vereenvoudigd voorbeeldje van de code die ik momenteel gebruik:

    PHP Code:
            mb_ereg_search_init($contents'([^¤]*)¤');        
            
    $r mb_ereg_search();
            if (
    $r) {
                
    $r mb_ereg_search_getregs();        
                do {
                    
    $data mb_split('\|'$r[0]);
                    
    $query sprintf("INSERT INTO data_utf16 (nr, name, first_name, language, email, extra, sex, field1, field2) VALUES ('%s', '%s', '%s', '%s', '%s', '%s', '%s', 0, 1);"mysql_escape_string($data[0]), mysql_escape_string($data[5]), mysql_escape_string($data[7]), mysql_escape_string($data[17]), mysql_escape_string($data[19]), mysql_escape_string($data[25]), mysql_escape_string($data[3]));
                    
                     
    mysql_query($query$this->db);                
                                 
                     
    $r mb_ereg_search_regs();                    
                } while (
    $r);
                
            } 
    no votes  

  4. #4

    Registered
    28/04/03
    Location
    Lier
    Posts
    266
    iTrader
    1 (100%)
    Mentioned
    0 Post(s)
    Reputation
    0/0
    PHP Code:
    $contents iconv('UTF-16''UTF-8'$contents); 
    heeft uiteindelijk gewerkt.

    Bedankt voor de tip dJeez
    no votes  

  5. #5
    dJeez's Avatar
    Registered
    17/07/02
    Location
    Sol System
    Posts
    10,064
    iTrader
    1 (100%)
    Mentioned
    0 Post(s)
    Reputation
    27/78
    Quote Originally Posted by DeFlup View Post
    This quote is hidden because you are ignoring this member. Show
    PHP Code:
    $contents iconv('UTF-16''UTF-8'$contents); 
    heeft uiteindelijk gewerkt.

    Bedankt voor de tip dJeez
    Da's graag gedaan, bij character encoding problemen moet je altijd eerst de encoding van de bron checken, het probleem ligt hem nl. meestal daar (naar mijn ervaring toch ).
    PSN: dJeezBE - Delicious bookmarks
    Disclaimer: I am currently suffering from severe CSD (Compulsive Sarcasm Disorder). - L'onion fait la farce - Facile largire de alieno
    Pastafarian by choice
    no votes  

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  

Log in

Log in