Thread: character encoding issue
-
09-09-2010, 18:58 #1Member
- 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
-
-
09-09-2010, 20:54 #2Member
- 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 alienoPastafarian by choiceno votes
-
10-09-2010, 10:52 #3Member
- 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
-
10-09-2010, 10:58 #4Member
- Registered
- 28/04/03
- Location
- Lier
- Posts
- 266
- iTrader
- 1 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 0/0
heeft uiteindelijk gewerkt.PHP Code:$contents = iconv('UTF-16', 'UTF-8', $contents);
Bedankt voor de tip dJeez
no votes
-
10-09-2010, 23:04 #5Member
- Registered
- 17/07/02
- Location
- Sol System
- Posts
- 10,064
- iTrader
- 1 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 27/78
PSN: dJeezBE - Delicious bookmarks
Disclaimer: I am currently suffering from severe CSD (Compulsive Sarcasm Disorder). - L'onion fait la farce - Facile largire de alienoPastafarian by choiceno votes

).
