2010-11-02 9 views
9

estoy generando el archivo csv con los siguientes comandos de cabecera:PHP archivo csv generada está mostrando una £ por una libra signo del Reino Unido (£) en Excel 2007

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

Si abro el archivo en Excel 2007 , entonces obtengo  £ donde aparezca un signo £. Sin embargo, si abro el archivo en Notepad ++, entonces los signos de libra aparecen bien; Del mismo modo, si cambio el tipo de contenido a texto/plano y me deshago del encabezado de adjunto, los signos de libra aparecen correctamente en el navegador.

Una cosa extraña es que si voy al menú "Formato" en Notepad ++, parece que el archivo está codificado en "UTF-8 sin BOM". Si cambio esto a "Codificar en UTF-8", guarde el archivo, los signos de libra aparecen correctamente en Excel. ¿Hay alguna forma de hacerlo para que el archivo esté guardado en esta codificación por PHP?

+1

Necesita mostrar más detalles sobre el script PHP que genera el archivo –

+0

Sé que la codificación UTF para £ es £ podría simplemente ingresar libras de esa manera. No tengo experiencia en Excel, por lo que este podría ser un comentario inútil;) – theorise

+0

La codificación UTF para £ no es £ - eso es codificación HTML. No puede usar la codificación HTML en archivos CSV. – Gnuffo1

Respuesta

11

Salida 0xEF 0xBB 0xBF antes de emitir los datos CSV. No se olvide de aumentar el encabezado de longitud del contenido en 3 si lo maneja.

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

¿Cómo? echo "0xEF 0xBB 0xBF"; no funciona – Gnuffo1

+5

echo "\ xef \ xbb \ xbf"; –

+1

¿En qué archivo debe colocarse? –

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); 

Publicado el anterior por user769889 pero perdió con mis frustraciones con este tema v-molesto, todo resuelto ahora y trabajando. Espero que esto ayude a alguien ...

Cuestiones relacionadas