Foros del Web » Programando para Internet » PHP »

Problemas con ñ y tildes

Estas en el tema de Problemas con ñ y tildes en el foro de PHP en Foros del Web. Cordial saludo. He migrado una base de datos con su codigo fuente a otro servidor pero me doy cuenta que la base de datos se ...
  #1 (permalink)  
Antiguo 01/04/2016, 10:54
 
Fecha de Ingreso: febrero-2005
Mensajes: 673
Antigüedad: 19 años, 1 mes
Puntos: 2
Pregunta Problemas con ñ y tildes

Cordial saludo.

He migrado una base de datos con su codigo fuente a otro servidor pero me doy cuenta que la base de datos se muestra bien las tildes y ñ el problema es visualizarlo en el aplicativo desarrollado con php; lo curioso es que cuando pongo la siguiente sentencia en el archivo de conexion me muestra bien
Código PHP:
<?php
function crearConexion(){
    
$Servidor   "localhost";
    
$BD "prueba";
    
$Usuario "root";
    
$Clave "";
    
//Creando la conexión, nuevo objeto mysqli
    
$conexion = new mysqli($Servidor,$Usuario,$Clave,$BD);
    
//Si sucede algún error la función muere e imprimir el error
    
if($conexion->connect_error){
        die(
"Error en la conexion : ".$conexion->connect_errno.
                                  
"-".$conexion->connect_error);
    }
    
//Si nada sucede retornamos la conexión

    /** sentencia cambio del juego de caracteres a utf8 */
    
if (!$conexion->set_charset("utf8")) {
        
printf("Error cambiando el juego de caracteres utf8: %s\n"$conexion->error);
    } 
    else {
        
printf("Juego de caracteres actual: %s\n"$conexion->character_set_name());
    }
    return 
$conexion;
}
?>
Al hacer seguimiento del archivo de conexion, nunca entra al if que pregunta si el charset es diferente a utf8; si borro esa sentencia vuelvo a tener problemas con las ñ y tildes; que puedo hacer??
  #2 (permalink)  
Antiguo 01/04/2016, 11:23
 
Fecha de Ingreso: enero-2009
Ubicación: Kandor
Mensajes: 209
Antigüedad: 15 años, 2 meses
Puntos: 11
Respuesta: Problemas con ñ y tildes

Si usas mysql toda la collation de Base de datos y tablas debe ser utf8 - utf8_spanish_ci y en la conexión:
$Conex=new mysqli(.....);
$Conex->set_charset("utf8");

En apache:
[httpd.conf]
AddDefaultCharset utf-8

En php:
[php.ini]
default_charset = "utf-8"
mbstring.internal_encoding=utf-8
mbstring.http_output=UTF-8
mbstring.encoding_translation=On
mbstring.func_overload=0

Por ultimo tus html debe tambien configurar el utf8 con la siguiente linea:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  #3 (permalink)  
Antiguo 04/04/2016, 10:33
 
Fecha de Ingreso: febrero-2005
Mensajes: 673
Antigüedad: 19 años, 1 mes
Puntos: 2
Pregunta Respuesta: Problemas con ñ y tildes

Cordial saludo.

Hice todo lo que me escribiste en el php y apache; mi pregunta es porque debo escribir $Conex->set_charset("utf8"); en el archivo de conexión si se parametrizó en las configuraciones?

En el hosting anterior me funcionaba a las mil maravillas sin tanta configuración ni poner $Conex->set_charset("utf8");

Mi archivo de conexion era:
Código PHP:
function crearConexion(){ 
    
$Servidor   "localhost"
    
$BD "prueba"
    
$Usuario "root"
    
$Clave ""
    
//Creando la conexión, nuevo objeto mysqli 
    
$conexion = new mysqli($Servidor,$Usuario,$Clave,$BD); 
    
//Si sucede algún error la función muere e imprimir el error 
    
if($conexion->connect_error){ 
        die(
"Error en la conexion : ".$conexion->connect_errno
                                  
"-".$conexion->connect_error); 
    } 
    
//Si nada sucede retornamos la conexión 
    
return $conexion

Agradezco toda la atención prestada y tus comentarios.
  #4 (permalink)  
Antiguo 04/04/2016, 10:43
 
Fecha de Ingreso: octubre-2010
Ubicación: España
Mensajes: 1.007
Antigüedad: 13 años, 6 meses
Puntos: 123
Respuesta: Problemas con ñ y tildes

Código PHP:
Ver original
  1. $Conex->set_charset("utf8");

Esa línea no pregunta si la conexión es utf8, si no que establece el juego de caracteres a UTF8.

Código PHP:
Ver original
  1. if (!$conexion->set_charset("utf8")) { // aquí no preguntas si es utf8, preguntas si no se ha podido establecer la codificación a utf8

Esto te sucede por qué en alguna parte de tu base de datos la codificación no es utf8
  #5 (permalink)  
Antiguo 05/04/2016, 16:52
 
Fecha de Ingreso: enero-2009
Ubicación: Kandor
Mensajes: 209
Antigüedad: 15 años, 2 meses
Puntos: 11
Respuesta: Problemas con ñ y tildes

Pues en realidad es la api mysqli la que esta configurada por defecto para usar el juego de caracteres latin1. Es posible que anteriormente no lo hayas tenido que configurar porque en tu BD la colacion tambien usaba un juego de caracteres latin1. Al estar iguales no te diste cuenta porque no tenias la necesidad de usar caracteres raros. Pero ahora, que tienes la necesidad y usas Ñs y acentos que no estan en el juego de caracteres latin1 te aparecieron los caracteres raros. Tambien puede ser que cuando creaste la base de datos nueva no le pusiste la misma colación que la original, porque no sabias que se tenia que tomar eso en cuenta.
Como haya sido, lo mejor es usar utf8 en BD, conexiones, apache, php, HTMLs y en cualquier API de terceros que se vaya agregando.

Etiquetas: mysql, tildes
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:10.