Codificación PHP fputcsv

Creo un archivo csv con fputcsv. Quiero que el archivo csv esté en windows1251 ecnding. Pero no puede encontrar la solución. ¿Cómo puedo hacer eso? Aclamaciones

La encoding predeterminada para un archivo de Excel es ANSI específico de la máquina, principalmente windows1252 . Pero dado que está creando ese archivo y tal vez insertando caracteres UTF-8, ese archivo no se manejará bien.

Puede usar iconv() al crear el archivo. P.ej:

 function encodeCSV(&$value, $key){ $value = iconv('UTF-8', 'Windows-1252', $value); } array_walk($values, 'encodeCSV'); 

Está funcionando: disfruta
usa esto antes de fputcsv:

 $line = array_map("utf8_decode", $line); 

El archivo estará en la encoding en la que estén sus cadenas. Las cadenas de PHP son matrices de bytes sin formato, sus codificaciones dependen de donde provengan los bytes. Si acabas de leerlos de tus archivos de código fuente, están en lo que guardaste como código fuente. Si son de una base de datos, tienen la encoding en la que se estableció la conexión de la base de datos.

Si necesita convertir de una encoding a otra, use iconv . Si necesita más información en profundidad, consulte aquí:

  • Lo que todo progtwigdor debe saber sobre las codificaciones y los conjuntos de caracteres para trabajar con texto
  • Manejo de Unicode de adelante hacia atrás en una aplicación web

Pruebe la función iconv:

http://php.net/manual/en/function.iconv.php

Para transformar los miembros de la matriz que está pasando a la función fputcsv a la encoding que desee.

 fputs( $fp, $bom = chr(0xEF) . chr(0xBB) . chr(0xBF) ); 

¡Prueba esto, funcionó para mí!