2010-11-02 42 views
9

Je générer le fichier csv avec les commandes d'en-tête suivantes:fichier csv généré PHP affiche  £ pour un signe de la livre sterling (£) dans Excel 2007

header("Content-type: text/csv; charset=utf-8; encoding=utf-8"); 
header('Content-Disposition: attachment; filename="products.csv"'); 

Si j'ouvre le fichier dans Excel 2007 , alors je reçois £ partout où un signe £ devrait apparaître. Cependant, si j'ouvre le fichier dans Notepad ++, alors les signes dièse apparaissent bien; De même, si je change le type de contenu en texte/plain et que je supprime l'en-tête d'attachement, les signes dièse apparaissent correctement dans le navigateur.

Une chose étrange est que si je vais dans le menu "Format" dans Notepad ++, il apparaît que le fichier est codé en "UTF-8 sans nomenclature". Si je change cela en "Encoder en UTF-8", puis enregistrez le fichier, les signes dièse apparaissent correctement dans Excel. Y at-il un moyen de faire en sorte que le fichier est enregistré dans cet encodage par PHP?

+1

Vous devez montrer plus de détails sur le script PHP générant le fichier –

+0

Je sais que l'encodage UTF pour £ est £ pourriez-vous juste entré des livres de cette façon. Je n'ai pas d'expérience dans Excel, donc ceci pourrait être un commentaire inutile;) – theorise

+0

L'encodage UTF pour £ n'est pas £ - c'est l'encodage HTML. Vous ne pouvez pas utiliser l'encodage HTML dans les fichiers CSV. – Gnuffo1

Répondre

11

Sortie 0xEF 0xBB 0xBF avant d'émettre les données CSV. N'oubliez pas d'augmenter l'en-tête de longueur du contenu de 3 si vous le gérez.

header('Content-type: text/csv;'); 
header('Content-Length: ' + strlen($content) + 3); 
header('Content-disposition: attachment;filename=UK_order_' . date('Ymdhis') . '.csv'); 
echo "\xef\xbb\xbf"; 
echo $content; 
exit; 
+0

Comment? écho "0xEF 0xBB 0xBF"; ne fonctionne pas. – Gnuffo1

+5

echo "\ xef \ xbb \ xbf"; –

+1

Dans quel fichier doit-il être placé? –

0
header("Expires: Mon, 26 Nov 1962 00:00:00 GMT"); 
header("Last-Modified: " . gmdate('D,d M Y H:i:s') . ' GMT'); 
header("Cache-Control: no-cache, must-revalidate"); 
header("Pragma: no-cache"); 
header('Content-Type: text/csv;'); 
header("Content-Disposition: attachment; filename=".$savename); 
echo utf8_decode($csv_string); 

Publié comme ci-dessus par user769889 mais je manqué avec mes frustrations avec ce problème de v-ennuyeux, tous les fixes et travaillant. J'espère que cela aide quelqu'un ...