Ik heb een script gemaakt dat data uit een MySQL tabel haalt en deze als .csv aan de client aanbied. Werkt allemaal perfect, alleen gaat het mis als er speciale characters in de $csv variabele komen. Ik heb van alles geprobeerd met charsets enzo maar het lukt maar niet. Als ik eerst de info wegschrijf naar een .csv op de server en die als download aanbiedt, werkt het wel prima. Maar dat wil ik niet, ik wil het direct aan bieden. Het script:
En dit werkt wel om de een of andere vage reden:
Zo zou het moeten:
En zo krijg ik het:
(In werkelijkheid staat er nu na Ren zo'n mooi vierkant blokje, maar die kan ik hier niet typen)
Ik heb dus geprobeerd om deze regel:
Te veranderen in:
Geen resultaat. Wat mis ik??
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| $csv = ""; $userdata = dbquery("SELECT * FROM userdata"); while($array = mysql_fetch_array($userdata, MYSQL_NUM)) { $csvstring = '"' . implode('";"', $array) . '"'; $csvstring = html_entity_decode($csvstring, ENT_NOQUOTES); $csv .= $csvstring; $csv .= "\n"; } $filesize = mb_strlen($csv, '8bit'); $filename = "csvtest.csv"; header('Content-Description: File Transfer'); header('Content-Type: text/csv'); header("Content-Disposition: attachment; filename=\"".$filename."\";"); header('Content-Transfer-Encoding: binary'); header('Content-Length: ' . $filesize); header('Expires: 0'); header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header('Pragma: public'); ob_clean(); flush(); echo "$csv"; exit; |
En dit werkt wel om de een of andere vage reden:
PHP:
1
2
3
4
5
6
7
8
9
10
11
| $csv = ""; $userdata = dbquery("SELECT * FROM userdata"); $handle = fopen("testfile2.csv", "w") or die("Can't open file"); while($array = mysql_fetch_array($userdata, MYSQL_NUM)) { $csvstring = '"' . implode('";"', $array) . '"'; $csvstring = html_entity_decode($csvstring, ENT_NOQUOTES); $csv .= $csvstring; $csv .= "\n"; } fwrite($handle, $csv); fclose($handle) or die("Could not close file"); |
Zo zou het moeten:
code:
1
| "René";"Van De";"Biezen"; |
En zo krijg ik het:
code:
1
| "Ren;";"Van De";"Biezen"; |
(In werkelijkheid staat er nu na Ren zo'n mooi vierkant blokje, maar die kan ik hier niet typen)
Ik heb dus geprobeerd om deze regel:
PHP:
1
| header('Content-Type: text/csv'); |
Te veranderen in:
PHP:
1
| header('Content-Type: text/csv; charset=ISO-8859-1'); |
Geen resultaat. Wat mis ik??
[ Voor 10% gewijzigd door bindsa op 16-04-2010 17:11 ]