PHP - PHP - Exportar a Excel - Problemas tildes

 
Vista:

PHP - Exportar a Excel - Problemas tildes

Publicado por Raquel (3 intervenciones) el 27/11/2012 13:48:00
Buenos días,

Tengo una aplicación hecha en la que hago una extracción de un fichero txt a una base de datos excel. Mi problema viene ahora, que me he dado cuenta que los datos exportados al excel que contengan tildes me los cambia por otros caracteres. ¿Sabría alguien decirme a que se debe? ¿Cómo poder solucionarlo?

Gracias de antemano.

Saludos.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve
Val: 3.943
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

PHP - Exportar a Excel - Problemas tildes

Publicado por xve (6935 intervenciones) el 27/11/2012 14:34:46
Hola Raquel, creo que es por el charset... puede que estés trabajando en el servidor con utf-8 y en tu ordenador estés con iso-8859-15? o al revés?

No muestras como haces la exportación, pero si lo haces por web, te podría faltar algo como:
1
header("Content-Type:   application/vnd.ms-excel; charset=utf-8");


También puedes probar a pasar tus datos a iso o utf con utf8_encode() o utf8_decode()...

Coméntanos si te sirve, ok?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

PHP - Exportar a Excel - Problemas tildes

Publicado por Raquel (3 intervenciones) el 24/01/2014 14:04:16
Hola,

Resulta ser que me he vuelto a encontrar con el mismo problema y buscando soluciónes di con un comentario mio al respecto que había puesto hace más de un año.. (increible) y el cual no había leido la respuesta que me habían dado.

He probado el header, y me da error siempre en la línea donde lo ponga así que he tenido que comentarlo.

Lo que sí me ha servido es la función utf8_decode() y he podido solucionar el problemas.

Muchas gracias por tu respuesta, dicen que vale más tarde que nunca... pues así ha sido... Lo he leido tarde pero con fin satisfactorio.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

PHP - Exportar a Excel - Problemas tildes

Publicado por Yesica Almaraz (1 intervención) el 21/05/2014 19:46:11
tengo el mismo problema que tu, que al hacer mi exportación a un doc de excel me generaba errores por las tildes y no abría el documento, ahora utilice lo que dices tu .utf8_decode($mostrar['Usuario']) ahora las palabras con tildes o 'Ñ' solo me las cambia por un sigo de interrogación (?) no se como lo utilizaste. Me puedes ayudar?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

PHP - Exportar a Excel - Problemas tildes

Publicado por Kevin (1 intervención) el 07/08/2018 18:10:21
Hola encode() funciono para mi, en mi caso estoy Importando de un xls. un ejemplo::

$data_excel[$i-1]['accion']= utf8_encode($sheets['cells'][$i][1]);

gracias por el dato.- saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

PHP - Exportar a Excel - Problemas tildes

Publicado por Gus (1 intervención) el 08/09/2016 14:44:28
Yo lo resolví de esta manera.

colocando

header("Content-Type: application/vnd.ms-excel charset=iso-8859-1");

y

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1 " />

en el html.

Espero te sirva.
Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar

PHP - Exportar a Excel - Problemas tildes

Publicado por Octavio (1 intervención) el 06/10/2016 11:39:07
Muchísimas gracias

Me funciono a la perfección
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

PHP - Exportar a Excel - Problemas tildes

Publicado por Ang (6 intervenciones) el 17/02/2017 20:02:30
Excelente!!!

Gracias Gus.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

PHP - Exportar a Excel - Problemas tildes

Publicado por raymundo martinez (1 intervención) el 23/02/2017 00:19:22
ami me sirvio así..


clic derecho en propiedades de mi base de datos: configurar--->

character set: utf8 -- UTF-8 Unicode
collation: utf8_spanish_ci

y en el codigo:

header("Content-Type: application/vnd.ms-excel; charset=iso-8859-1");

y en el html
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

PHP - Exportar a Excel - Problemas tildes

Publicado por Álvaro Bassó (1 intervención) el 30/03/2017 22:42:27
Muchas gracias me ha funcionado perfecto.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

PHP - Exportar a Excel - Problemas tildes

Publicado por JOSE (1 intervención) el 07/04/2017 23:00:42
buenas tardes probé todo lo que sugirieron y aun así no me funciona me coloca muchos caracteres al exportear

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
function fnExcelReport() {
    var tab_text = '<html xmlns:x="urn:schemas-microsoft-com:office:excel">';
    tab_text = tab_text + '<head><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet>';
 
    tab_text = tab_text + '<x:Name>Test Sheet</x:Name>';
 
    tab_text = tab_text + '<x:WorksheetOptions><x:Panes></x:Panes></x:WorksheetOptions></x:ExcelWorksheet>';
    tab_text = tab_text + '</x:ExcelWorksheets></x:ExcelWorkbook></xml></head><body>';
 
    tab_text = tab_text + "<table border='1px'>";
    tab_text = tab_text + $('#myTable').html();
    tab_text = tab_text + '</table></body></html>';
 
    var data_type = 'data:application/vnd.ms-excel';
 
    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");
 
    if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) {
        if (window.navigator.msSaveBlob) {
            var blob = new Blob([tab_text], {
                type: " application/vnd.ms-excel; charset=iso-8859-1"
            });
            navigator.msSaveBlob(blob, 'Test file.xls');
        }
    } else {
        $('#test').attr('href', data_type + ', ' + encodeURIComponent(tab_text));
        $('#test').attr('download', 'Test file.xls');
    }
 
}

este es el script que utilizo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

PHP - Exportar a Excel - Problemas tildes

Publicado por JD (1 intervención) el 24/10/2017 17:27:20
Yo lo resolví mandando el código para generar un excel a una pagina php con lo siguiente:
1
2
3
4
5
6
7
8
9
10
<?php
 
$excel=$_POST['export'];
header("Content-type: application/vnd.ms-excel; charset=iso-8859-1");
header("Content-disposition: attachment; filename=Archivo.xls");
 
print utf8_decode($excel);
exit;
 
?>
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar

PHP - Exportar a Excel - Problemas tildes

Publicado por David (1 intervención) el 09/11/2017 07:23:31
muchas gracias, tu metodo si funciona
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

PHP - Exportar a Excel - Problemas tildes

Publicado por andres alvarez (1 intervención) el 30/05/2018 17:41:16
perfecto, este método funciona a la fija
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

PHP - Exportar a Excel - Problemas tildes

Publicado por Luis (1 intervención) el 02/02/2019 00:01:38
¡por fin me anda! Muchas gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

PHP - Exportar a Excel - Problemas tildes

Publicado por vimuriel (1 intervención) el 14/05/2019 04:18:46
Excelente
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Kathyu
Val: 1.802
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

PHP - Exportar a Excel - Problemas tildes

Publicado por Kathyu (905 intervenciones) el 19/11/2019 22:50:39
Señores una duda.

Tengo algunos reportes que bajo en XLS de mis sistemas, pero hoy estoy haciendo un reporte de otra DB.

Esa DB tiene la siguiente configuración:
1
2
3
4
5
6
7
8
9
10
show variables like 'char%';
 
Variable_name	                 Value
character_set_client	         utf8mb4
character_set_connection	 utf8mb4
character_set_database	         latin1
character_set_filesystem	binary
character_set_results	        utf8mb4
character_set_server	        latin1
character_set_system	        utf8

ok, en los header de mi archivo que genera el XLS tengo esto
1
2
3
4
5
6
7
8
9
10
11
//Descarga el archivo desde el navegador
header('Expires: 0');
header('Cache-control: private');
// header('Content-Type: application/x-octet-stream'); // Por lo general solo con esto trabajo en mis DB's y funciona de maravilla
header('Content-Type: text/html; charset=UTF-8'); // Agregada queriendo solventar el problema
header('Content-type: application/vnd-ms-excel; charset=utf-8'); // Agregada queriendo solventar el problema
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Content-Description: File Transfer');
header('Last-Modified: '.date('D, d M Y H:i:s'));
header('Content-Disposition: attachment; filename="'.$name.'"');
header("Content-Transfer-Encoding: binary");

Pero cuando se descarga el XLS los acentos se ven horribles, alguna idea de que puedo hacer.

Ya probé varios charset y mas yerbas :-s
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

PHP - Exportar a Excel - Problemas tildes

Publicado por Luis (1 intervención) el 23/11/2020 20:31:25
Funciono perfecto! muchas gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Kathyu
Val: 1.802
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

PHP - Exportar a Excel - Problemas tildes

Publicado por Kathyu (905 intervenciones) el 20/11/2019 16:10:56
Alguna idea?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Yoel
Val: 617
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

PHP - Exportar a Excel - Problemas tildes

Publicado por Yoel (198 intervenciones) el 20/11/2019 16:37:23
El problema que se te está presentando con los acentos, es debido al tipo de charset que estas usando en las tablas de la bd es distinto al de tu conexión. Para solucionar el problema de los acentos, tienes que tener el mismo en los dos lugares. Si estas usando mysqli lo defines desde tu conexión de la siguiente manera.

1
$conexion->query("SET NAMES 'utf8'");



Nota: Todas las columnas de la tabla tienen que tener el mismo charset que el que estas definiendo en la bd así como el script de php.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Kathyu
Val: 1.802
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

PHP - Exportar a Excel - Problemas tildes

Publicado por Kathyu (905 intervenciones) el 20/11/2019 17:55:03
Ya había visto algo así pero no comprendí de al todo, acá mis dudas.

1- No importa que la DB tenga latin1 en su charset? yo puedo cambiarlo a utf-8 en mis querys?

2- Esta seria la estructura para definir el utf8? osea poner una query antes y luego mi select?
1
2
$solicitud_query = $mysqli->query("SET NAMES 'utf8' ");
$solicitud_query = $mysqli->query("SELECT * FROM tabla ");
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Yoel
Val: 617
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

PHP - Exportar a Excel - Problemas tildes

Publicado por Yoel (198 intervenciones) el 20/11/2019 18:23:11
Si puedes cambiarlo desde el query pero no siempre queda y lo que planteas en tu código seria solo para la consulta que estas ejecutando no para todo tu proyecto , ahora si quieres solo cambiar la codificación de una columna, si no quieres cambiar el de loa base de datos puedes usar:

1
utf8_encode ( string $data )

El te hace la conversión de ISO-8859-1 (latin1) a utf-8 y si lo necesitas al revés seria

1
utf8_decode ( string $data )


El método te devuelve un string
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Kathyu
Val: 1.802
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

PHP - Exportar a Excel - Problemas tildes

Publicado por Kathyu (905 intervenciones) el 20/11/2019 18:47:54
Lo que pasa es que ya he hecho todo eso y nada

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
$desde = $mysqli->real_escape_string($_POST['desde']);
$hasta = $mysqli->real_escape_string($_POST['hasta']);
$usuario = $mysqli->real_escape_string($_POST['usuario']);
 
$name= 'Ordenes_'.$desde.'_'.$hasta.'.csv';
$solicitud_query = $mysqli->query("SET NAMES 'utf8' ");
$solicitud_query = $mysqli->query("SELECT '' AS fechaSolicitud, E.Customer_PO AS solicitud, '' AS estimado, '' AS disponible, E.Reference AS orden, E.Ship_By AS fecha, E.Nombre AS proveedor, '' AS concepto, E.MainAmount AS total, '' AS ahorro, '' AS tiempo, E.solicitadopor AS solicitadoPor, E.Ship_Via AS entrega FROM poscrs.jrnl_hdr E WHERE E.Ship_By BETWEEN '$desde' AND '$hasta' AND E. USER = $usuario ORDER BY fecha DESC ");
 
//Descarga el archivo desde el navegador
header('Expires: 0');
header('Cache-control: private');
header('Content-Type: text/html; charset=UTF-8');
header('Content-type: application/vnd-ms-excel; charset=utf-8');
// header('Content-Type: application/x-octet-stream'); // Archivo de Excel
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Content-Description: File Transfer');
header('Last-Modified: '.date('D, d M Y H:i:s'));
header('Content-Disposition: attachment; filename="'.$name.'"');
header("Content-Transfer-Encoding: binary");
 
// Para encabezado
$Datos .= "FECHA SOLICITUD,SOLICITUD,ESTIMADO,DISPONIBLE,ORDEN,FECHA ORDEN,PROVEEDOR,CONCEPTO,TOTAL,AHORRO,TIEMPO COMPRA,SOLICITADO POR,ENTREGAR EN";
// Para linea en Blanco o Salto de Linea
$Datos .= "\r\n";
while($row = $solicitud_query->fetch_array(MYSQLI_ASSOC))
	{
		$fechaSolicitud = $row['fechaSolicitud'];
		$solicitud = $row['solicitud'];
		$estimado = $row['estimado'];
		$disponible = $row['disponible'];
		$orden = $row['orden'];
		$fecha = $row['fecha'];
		$proveedor = $row['proveedor'];
		$proveedorFinal = str_replace( ',', ' ', $proveedor );
		$concepto = $row['concepto'];
		$total = $row['total'];
		$ahorro = $row['ahorro'];
		$tiempo = $row['tiempo'];
		$solicitadoPor = $row['solicitadoPor'];
		$entrega = $row['entrega'];
		$entregax = utf8_encode($entrega);
 
    	$Datos .= "$fechaSolicitud,$solicitud,$estimado,$disponible,$orden,$fecha,$proveedorFinal,$concepto,$total,$ahorro,$tiempo,$solicitadoPor,$entregax";
    	$Datos .= "\r\n";
	}#end while
echo $Datos;

Y me devuelve esto, con la palabra ALMACÉN y lo mismo con ñ, tildes y demas
1
ALMACÉN

Estro me arroja Navicat en las propiedades de la DB
db
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Yoel
Val: 617
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

PHP - Exportar a Excel - Problemas tildes

Publicado por Yoel (198 intervenciones) el 20/11/2019 18:53:48
En lugar de usar utf8_encode usa utf8_decode ahora también puedes cambiar la tabla a utf-8 este cambio no te debe de afectar el texto que tienes en la columna ya hesite esa prueba siempre realiza un backup de la bd.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Kathyu
Val: 1.802
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

PHP - Exportar a Excel - Problemas tildes

Publicado por Kathyu (905 intervenciones) el 20/11/2019 19:17:42
Con decode funcionó, que lastima que no lo había probado antes

La base no es mía, no puedo tocarla, este no es mi sistema, es un externo del cual quiero sacar reportes, como tal no puedo hacerle nada a la DB
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

PHP - Exportar a Excel - Problemas tildes

Publicado por jose torres (1 intervención) el 30/12/2019 23:07:55
Llevaba 2 días peleando con esos reportes, Muchísimas gracias, a mi me funcionó el utf8_decode();

echo utf8_decode($row['descripcion']);

y uso los headers para exportar el archivo a excel.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

PHP - Exportar a Excel - Problemas tildes Solucion Final

Publicado por Román Mtz (1 intervención) el 26/11/2021 17:30:12
Mi Solución Final fue--->

el header inicial (linea 1 a la 4 importante)
<?php
header("Content-type: application/vnd.ms-excel; charset=iso-8859-1");
header("Content-Disposition: attachment; filename= usuarios_intel.xls");
?>

Si los nom. de la tabla tienen tildes o ñ forzosamente tendrán que lleva utf8_decode

<th>Id
</th>
<th>Nombre
</th>
<th>Correo
</th>
<th><?php echo utf8_decode('País') ?>
</th>
<th>Domicilio
</th>
<th>Puesto
</th>
<th><?php echo utf8_decode('Teléfono') ?>
</th>
<th>Fecha y Hora de registro
</th>


Para imprimir los datos desde BD

<td><?php echo utf8_decode($row['id_user']); ?></td>
<td><?php echo utf8_decode($row['names']); ?></td>
<td><?php echo utf8_decode($row['email']); ?></td>
<td><?php echo utf8_decode($row['country']); ?></td>
<td><?php echo utf8_decode($row['adress']); ?></td>
<td><?php echo utf8_decode($row['position']); ?></td>
<td><?php echo utf8_decode($row['phone']); ?></td>
<td><?php echo utf8_decode($row['dater']); ?></td>
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

PHP - Exportar a Excel - Problemas tildes Solucion Final

Publicado por jimmy cruz (1 intervención) el 12/11/2022 12:46:18
Hola 100% recomendado, me funciono
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar