0

 aqui es el que genera el reporte php

<?php
require "../conexion.php";

 $mos ="";
      
   if(($_GET['fechaini']=="") && ($_GET['fechafin']==""))
   {
   $consulta="";
   }else
      { 
     $consulta="AND s.fecha BETWEEN '".$_GET['fechaini']."' AND '".$_GET['fechafin']."'";
    }
      $so ="SELECT s.Id_folio, s.fecha, d.id_departamento, d.nombre,s.descripcion_trabajo, s.observaciones, s.Id_servicio,s.tipo_solicitud, s.costo,  s.id_vehiculo, u.Empleado_Nombre, u.Empleado_id, t.Id_servicio, t.Nombre_servicio,s.Autoriza_Soli,s.Autoriza_Ger,s.Autoriza_GerIs,s.Autoriza_trab,s.Autoriza_termi FROM solicitud as s, departamento as d ,usuarios as u, tipo_servicio as t  WHERE s.id_departamento=d.id_departamento and s.Empleado_id =u.Empleado_id and s.Id_servicio =t.Id_servicio and  Autoriza_Soli=1 and Autoriza_Ger =2 and Autoriza_GerIs=3 and Autoriza_trab=4 and Autoriza_termi=5 ".$consulta."";
                  

$mostrarso=mysql_query($so);

$mos.="<table >


<tr>
        
        <th scope='col' bgcolor='#008000'>Solicitud Servicio</th>
     <th scope='col' bgcolor='#008000'>Folio</th>
        <th scope='col' bgcolor='#008000'>Fecha</th>
        <th scope='col' bgcolor='#008000'>Mes</th>
        <th scope='col' bgcolor='#008000'>Departamento</th>
        <th scope='col' bgcolor='#008000'>Area</th>
        <th scope='col' bgcolor='#008000'>Tipo Servicio</th>
        <th scope='col' bgcolor='#008000'>Descripción del trabajo</th>
        <th scope='col' bgcolor='#008000'>Observaciones</th>
  <th scope='col' bgcolor='#008000'>Unidad</th>
        <th scope='col' bgcolor='#008000'>Costo</th>
     
      </tr><tr><td></td></tr>
      ";

           
  while($i=mysql_fetch_array($mostrarso)){
      
       $mos .= "<tr><td>".$i["tipo_solicitud"]."</td>";
     $mos .= "<td>".$i["Id_folio"]."</td>";
      $mos .= "<td>".$i["fecha"]."</td>"; 
       $mos .= "<td>".$i["fecha"]."</td>";
       $mos .="<td>".$i["nombre"]."</td>";
      $mos .="<td>".$i["nombre"]."</td>";
       $mos .= "<td>".$i["Nombre_servicio"]."</td>";
       $mos .= "<td>".utf8_decode($i["descripcion_trabajo"])."</td>"; 
       $mos .= "<td>".utf8_decode($i["observaciones"])."</td>"; 
       $mos .= "<td>".$i["id_vehiculo"]."</td>";
       $mos .= "<td>".$i["costo"]."</td>";
      
   
   

 }
$mos.="</table>";
       header("content-type: application/octet-stream");
       header("content-Dispositio:attachment; filename=Reporte.xls");
       header("pragma: no-cache");
       header("Expires: 0");
      echo $mos;
 ?>
 

introducir la descripción de la imagen aquí

hola estoy generando un reporte de excel desde php pero me sale asi raro como puedo quitarle las ñ las librerias de acentos y ñ se las puse ,alguna sugerencia

Esther
  • 35
  • 1
  • 8
  • Al parecer es la codificación, intenta darle un farmato con utf-8. http://php.net/manual/es/function.utf8-decode.php – Elias Catalan Nov 15 '18 at 20:33
  • esto lo pongo en php o en el html? – Esther Nov 15 '18 at 20:35
  • Si los datos vienen de una base de datos, ponle la codificación al objeto de conexión. – A. Cedano Nov 15 '18 at 20:36
  • podrian ser mas especificos porfavor – Esther Nov 15 '18 at 20:41
  • Lo ideal seria que comentaras tu codigo, para ver en que parte realizar la codificación, pero como dice @A.Cedano si tus datos bienen desde una DB, debes dar un utf8_decode($row); – Elias Catalan Nov 15 '18 at 20:42
  • Creo que `utf8_decode` no se debería usar nunca @EliasCatalan . Hay que establecer configuraciones globales, para evitar estar aplicando constantemente funciones de codificación sobre cada dato. Imagina un código con 100 variables a las que hay que aplicar `utf8_decode` ... Hay que resolver el problema de raíz. [Ver esta respuesta](https://es.stackoverflow.com/a/59510/29967) donde se aborda este tipo de problema aportando una solución definitiva. – A. Cedano Nov 15 '18 at 21:12
  • Esther, prueba a poner esto en tu archivo de conexión, una vez creada la conexión: `mysql_set_charset('utf8',$link);` debes cambiar `$link` por el nombre que des a la conexión. Luego, en el `header` , puedes poner también `utf-8` del siguiente modo: `header("Content-Type: application/octet-stream; charset=utf-8");` Si has puesto `utf8_decode` en tus variables, lo puedes quitar. Si configuras bien tu entorno no vas a necesitar pasarte la vida aplicando soluciones a medio camino cada vez que escribas código nuevo. – A. Cedano Nov 15 '18 at 21:37
  • Estoy muy de acuerdo @A.Cedano – Elias Catalan Nov 16 '18 at 12:24

1 Answers1

0

Tuve el mismo problema en un reporte, si tu vista tiene HTML te recomiendo colocar la codificación charset=iso-8859-1 en el meta:

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

Si lo estás haciendo con data de base de datos, tal y como lo dice Elias en el comentario lo puedes colocar con utf8_decode de la siguiente manera:

$mos .="<td>".utf8_decode($i["nombre"])."</td>";

Y de esa manera en cada columna que lo requieras...
Espero te sirva de ayuda.
Saludos.

Virginia
  • 11
  • 5
  • Virginia bienvenida. Este tipo de problemas se resuelven aplicando una codificación coherente en todos los niveles. Lo más simple es usar `utf-8` en todo y evitar el uso de funciones como `utf8_decode`. Si son 100 variables, ¡a aplicar `utf8_decode` en las 100! Uffff. Y cuando sea un archivo nuevo, de nueeeeevo a recomenzar con `utf8_decode`. ¿Por qué no resolver el problema de una forma definitiva, en la configuración: `utf-8` en todas partes, en el `meta`, en la conexión a la base de datos, en PHP de forma global, en los datos mismos. Y problema resuelto para siempre. – A. Cedano Nov 15 '18 at 21:16
  • Si, exacto, sin embargo hace relativamente poco estuve trabajando con formularios en excel y el utf-8 no resolvía mi problema, indagando en la web encontré que con la norma iso-8859-1 si. Y claro, es mas fácil usarlo de esta forma porque como dices, evita que se deba repetir, por esto lo coloqué como primera opción. Tienes toda la razón en ello. Saludos. – Virginia Nov 16 '18 at 12:30