0

Realize una actualizacion de un sistema que se creo hace unos 5 años, el problema es que al realizar una consulta y muestra la informacion en una tabla aparecen uns simbolo en aquellas letras que tienen tildes o una letra Ñ, lo raro es que nada mas en el codigo que estab en el nuevo condigo que agregue tambien son datos de una tabla si aparece la ñ correctamente y en el codigo que ya estaba aparece los simbolos, por ejemplo en ves de caño aparece CAñO. En los codigo HTMl tiene agregado y en los php header("Content-Type: text/html;charset=utf-8");. La base de datos esta en utf8_spanish_ci y si los guarda correctamente

<!DOCTYPE html>
<!--
To change this license header, choose License Headers in Project Properties.
To change this template file, choose Tools | Templates
and open the template in the editor.
-->
<?php
     session_start(); 
   
 
header('Content-Type: text/html; charset=UTF-8');


?>

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> 
        <!-- INICIA BLOQUE JAVASCRIPT PARA CARGAR LA TABLA -->
        
        
         <script> 
            (function($) {
                $(document).ready(function(){
                    $("#tabla_lista_materiales").dataTable({
                        "bPaginate": true,
                        "bLengthChange": true,
                        "bFilter": true,
                        "bSort": false,
                        "bScrollCollapse": true,
                        "bInfo": false,
                        "bAutoWidth": true 
                    });
                });
            })(jQuery);             
        </script>       
        <!-- FINALIZA BLOQUE JAVASCRIPT PARA CARGAR LA TABLA -->
            
    <!-- INICIA BLOQUE JAVASCRIPT PARA ELIMINAR -->
        <script>             
            function Eliminar_material() {   
                var rows = document.getElementById('tabla_lista_materiales').getElementsByTagName('tbody')[0].getElementsByTagName('tr');    
                var tabla = document.getElementById('tabla_lista_materiales');
                var nombre;
                var control = true;
              
                  for (i = 0; i < rows.length; i++) {                      
                        rows[i].onclick = function() {                               
                         nombre = tabla.tBodies[0].rows[this.rowIndex-1].cells[1].innerHTML;                         
                         if ( control ){                           
                             control = false;                              
                            if (confirm("¿Está Seguro de Eliminar el material? \n\n" + nombre ) === true) {
                                 var parent = $(this).closest('tr');
                                 $.ajax({
                                     type: 'POST',
                                     url: 'formularios/eliminar_generico.php', 
                                     data: {iddelete: tabla.tBodies[0].rows[this.rowIndex-1].cells[0].innerHTML, tabla: "material", campo: "idmaterial"},
                                     beforeSend: function() {                                         
                                         parent.animate({'backgroundColor':'#fb6c6c'},300);
                                         
                                     },
                                     success: function(data) { 
                                         alert(data);
                                         parent.fadeOut(300,function() {
                                             parent.remove();
                                         });
                                     }
                                 });                                 
                             } else {
                                 //x = "You pressed Cancel!";
                             }      
                            // $("#contenido").load("paginas/frm_listar_usuario.php");
                          };              
                     };
                 }                             
             }(jQuery);                  
        </script>
        <!-- FINALIZA BLOQUE JAVASCRIPT PARA ELIMINAR -->
        
        
       <!-- INICIA BLOQUE JAVASCRIPT PARA EDITAR -->
       
         <script>             
            function Editar_material() {   
                var rows = document.getElementById('tabla_lista_materiales').getElementsByTagName('tbody')[0].getElementsByTagName('tr');    
                var tabla = document.getElementById('tabla_lista_materiales');
                var codigo, nombre;
                var control = true;
              
                  for (i = 0; i < rows.length; i++) {                      
                        rows[i].onclick = function() {                               
                         codigo = tabla.tBodies[0].rows[this.rowIndex-1].cells[1].innerHTML;
                         nombre = tabla.tBodies[0].rows[this.rowIndex-1].cells[3].innerHTML;
                         if ( control ){                           
                             control = false;                              
                            if (confirm("¿Está Seguro de editar la información del material? \n\n" + "Código: " + codigo + "\nNombre: " + nombre ) === true) {
                                 $('#contenido').load('formularios/frm_new_material.php/?accion=editar'+ tabla.tBodies[0].rows[this.rowIndex-1].cells[0].innerHTML);
                                                               
                             } else {
                                 //x = "You pressed Cancel!";
                             }      
                            // $("#contenido").load("paginas/frm_listar_usuario.php");
                          };              
                     };
                 }                             
             }(jQuery);                  
        </script>     
      
        <!-- FINALIZA BLOQUE JAVASCRIPT PARA EDITAR -->
        
        <title></title>
    </head>
    <body>
        <?php
        //put your code here        
          require_once 'conexion.php';   
                 
                      
        ?>       INICIA TABLA QUE MUESTRA LOS USUARIOS            
   <div id="tabla_materiales"> 
  
       <table class="display" style=" background-color:  #DCDCDC; width: 90%" border="1" id="tabla_lista_materiales">
        <thead>
        <h2 align="center">LISTA DE MATERIALES </h2>            
            <tr> 
                <th hidden ></th>
                <th style=" font-size: 11px; ">COD.</th>
                <th style=" font-size: 11px; ">CAT.</th>
                <th style=" font-size: 11px; ">NOMBRE</th>
                <th style=" font-size: 11px; ">U/M</th>  
                <th style=" font-size: 11px; ">STOCK</th>
                <th style=" font-size: 11px; ">CANT. MIN.</th>
                
                
                <?php                   
                if ($_SESSION['privilegio'] == "usuario" || $_SESSION['privilegio'] == "administrador"){
                    echo "<th style='font-size: 11px;'>OPC.</th>";
                    }
                ?>
                
                
            </tr>
        </thead>
        <tbody>
        <?php       
           
        $sql = "SELECT idmaterial, codigo, categoria, nombre_material,"
                . " unidad, cantidad, minimo FROM material";           
        $result = mysqli_query($conexion, $sql);     
          while ($rows = mysqli_fetch_row($result)) {  
              ?>
            <tr >
                <td hidden><?php echo $rows[0];?> </td>
                <td style=" font-size: 13px;"><?php echo $rows[1]; ?></td>
                <td style=" font-size: 13px; "><?php
                    $sql2 = "SELECT categoria FROM  categoria WHERE idcategoria=". $rows[2]; 
                    $result2 = mysqli_query($conexion, $sql2);
                    $cat = mysqli_fetch_row($result2);
                    echo strtoupper(utf8_encode($cat[0])); ?>
                </td>
                
                <td style=" font-size: 13px; "><?php echo mb_strtoupper(utf8_encode($rows[3]), 'utf-8'); ?></td>
                <td style=" font-size: 13px;  text-align: center"><?php
                    $sql2 = "SELECT unidad FROM unidad_medida WHERE idunidad_medida=". $rows[4]; 
                    $result2 = mysqli_query($conexion, $sql2);
                    $um= mysqli_fetch_row($result2);
                    echo strtoupper($um[0]); ?>
                </td>
                
                <td style=" font-size: 13px; text-align: center"><?php echo $rows[5]; ?></td>
                <td style=" font-size: 13px; text-align: center"><?php echo $rows[6]; ?></td>
                 
               
                <?php                   
                if ($_SESSION['privilegio'] == "usuario" || $_SESSION['privilegio'] == "administrador"){
                    echo "<td align='center'>
                    <a><img alt='Imagen de Editar' title='Editar' src='./recursos/img/edit.png'
                                                height='15px' width='15px' class='boton' onclick='Editar_material()' ></a>
                    <a><img id='eliminar_img'  alt='Imagen de Eliminar' title='Eliminar' src='./recursos/img/del.png'
                                          height='15px' width='15px' class='boton' onclick='Eliminar_material()'></a>
                </td>  ";
                    }
                ?>
                
                             
                
            </tr>                                    
        <?php }
          $sql = "";
          $sql2 = "";  
          $result = "";
          $result2 = "";
        ?>                      
        </tbody>
        <tfoot> 
            <td colspan="7" align="center">
                <?php                   
                //if ($_SESSION['privilegio'] == "usuario" || $_SESSION['privilegio'] == "administrador"){
                  //echo "<input type=button  id=btn_new_material value='Nuevo Material' "
                    //. " onclick=$('#contenido').load('formularios/frm_new_material.php/?accion=') >";  
                //}
                ?>  
                
                <input type="button"  id="btn_refrescar_tabla" value="Actualizar" onclick="cargar_nuevo('frm_listar_materiales')" class=""> 
                
            </td>
    </tfoot>
    </table>
   </div>      
    </body>
    <!--FINALIZA TABLA QUE MUESTRA LOS USUARIOS-->  
    
 
</html>

  • 1
    Comprueba la conexion a la base de datos desde tu PHP, quizas no esta forzada a UTF-8 – masterguru Jan 31 '22 at 15:13
  • Coloca tu tabla, para realizar pruebas y ayudarte mejor – Josue Vargas Jan 31 '22 at 15:18
  • en la base de datos si lo guarda con la letra ñ, y en las tablas nuevas no hay ningun problema solo hay problemas en las tablas del codigo que ya estaba, vot agregar el codigo de esa tabla – Luis Oliva Jan 31 '22 at 15:24
  • 1
    Pues quizas las manipulastes mal al subirlas, abriendo sus archivos exportados con editores de windows que no daban soporte a utf8 o no se dieron cuenta de que codificación usaban, y guardando sin pensar, y en ese momento se produjo un cambio de codificación y se corrompieron los datos, y luego, al importar, te quedaron mal por eso... ¿recuerdas si hicistes algo de eso? – masterguru Jan 31 '22 at 15:27
  • no, solo e abierto ese codigo con el editor de texto de debian y con visual code – Luis Oliva Jan 31 '22 at 15:28
  • mmm... vamos por pasos pues... exporta SOLO la estructura de la tabla corrupta y ponla en tu pregunta para empezar, asi veremos si dice las collations de las columnas y la tabla y vemos nada raro. Luego busca el mysqli_connect que tengas definido y debajo ponle un `printf("Conjunto de caracteres inicial: %s\n", $mysqli->character_set_name());` para que te muestre el charset con el que se está conectando a la base de datos – masterguru Jan 31 '22 at 15:36
  • solo un comentario, el problema no es en la base de datos porque ahi aparece la ñ correctamente, el problema es al mostrar los datos en php, lo raro es que lo nuevo que se le ha agregado no tiene ningun problema, muestra la letra ñ, pero en los archivos que ya estaban (nose modifico nada de eso) tiene ese problema que muestra otros simbolos en vez de un acento una letra ñ – Luis Oliva Jan 31 '22 at 16:20
  • 1
    Seguramente los datos guardados estaban en otra codificación y no los convertiste a UTF8, por eso es que no aparecen como deberían. – Triby Jan 31 '22 at 16:28
  • Bueno, segun lo que dices, y siguiendo a ciegas porque no me estas haciendo caso, y segun entiendo, ahora, en la misma tabla, pero en distintos registro algunos estan bien y otros estan mal... o sea, ya estan mezclados **dentro de la misma tabla** ¿es correcto lo que digo? Si es asi ya tienes el lio montado, porque no te queda otra que arreglar los malos a mano o borrar los nuevos, exportar, arreglarlo, importar y meter los nuevos de nuevo – masterguru Jan 31 '22 at 16:29

1 Answers1

1

Realiza estos pasos:

  1. Configura tu servidor web a UTF8.
  2. Agrega la codificación default en el archivo de configuración de PHP:

default_charset = "utf-8";

  1. Revisa tu lenguaje predeterminado, para la configuración de tu equipo e internet, que permita el uso de caracteres especiales y acentos.
  2. Si tu servidor de base de datos está correctamente configurado, y no tienes forma de configurar el servidor web, intenta forzar tu código PHP para mostrar la codificación que requieres usando:
utf8_decode y utf_encode
Raul Zarate
  • 301
  • 1
  • 6