Foros del Web » Programando para Internet » PHP »

Caracteres raros ...

Estas en el tema de Caracteres raros ... en el foro de PHP en Foros del Web. Cuando recojo los datos de mi base de datos y tienen acentos o eñes me salen caracteres raros en la web ... El chaset es ...
  #1 (permalink)  
Antiguo 03/02/2009, 08:38
 
Fecha de Ingreso: mayo-2005
Mensajes: 118
Antigüedad: 18 años, 11 meses
Puntos: 0
Caracteres raros ...

Cuando recojo los datos de mi base de datos y tienen acentos o eñes me salen caracteres raros en la web ...

El chaset es utf=8 en la web

Sin embargo si cambio los caracteres del acento en la base de datos por por ejemplo "comisión" en la web me lo pone bien.


¿A que se debe? ...

Gracias.
  #2 (permalink)  
Antiguo 03/02/2009, 08:53
Avatar de eft0  
Fecha de Ingreso: junio-2003
Ubicación: Santiago - Chile
Mensajes: 635
Antigüedad: 20 años, 10 meses
Puntos: 9
Respuesta: Caracteres raros ...

Que codificacion usas en la bbdd ?, y si asi funciona, entonces cuando hagas un INSERT los datos String guardalos con htmlentities()
__________________
eft0's stuff! - http://estebanfernandez.net
  #3 (permalink)  
Antiguo 03/02/2009, 09:09
Avatar de Anastasiaphp  
Fecha de Ingreso: junio-2006
Ubicación: El patio de mi casa
Mensajes: 196
Antigüedad: 17 años, 10 meses
Puntos: 3
Hola:

Yo estoy en un problema similar. Te digo la información que he recopilado por si te sirve de ayuda y después expongo mi problema:

1) Además de tener las páginas en utf-8, la base de datos también debes tenerla en utf-8 (si utilizas phpMyAdmin, ve a Operaciones y en cotejamiento señala utf8_unicode_ci) y también las celdas de las tablas que utilices.

2) Es posible que tu servidor tenga puesto por defecto la codificación iso-8859-1, si no pueden cambiártela, sube un fichero con el nombre .htaccess al directorio raíz del web que contenga la directiva: AddDefaultCharset utf-8

3) Justo después de hacer la consulta a la base de datos, añade la siguiente línea:
Código PHP:
mysql_query ("SET NAMES 'utf8'"); 
Se supone que con esto debería funcionar, a mí no me funciona, pienso si estaré poniendo algo mal y no encuentro el qué, me sigue saliendo el típico rombito con la interrogación en el centro cuando hay algún acento, dejo el código a ver si alguien ve algún error, desde ya, gracias:

Código PHP:
           $conn db_connect();
           
$query "
           SELECT *
           FROM paginas
           WHERE id_pagina='1'
           "

           
mysqli_query ("SET NAMES 'utf8'");
           
$result = @$conn->query($query); 
¡¡¡¡SOLUCIONADO!!!!

Me faltaba poner la conexión en la consulta, en mi caso:
Código PHP:
mysqli_query ($conn"SET NAMES 'utf8'"); 
peconrrixico, pruébalo a ver si a ti también te funciona.



Vaya! no funciona bien del todo, ahora sube mal los caracteres a phpMyAdmin reconvirtiéndolos y con el consecuente desastre

Ahora sí, arreglado.
Mi problema era que solo había puesto la línea mysqli_query ($conn, "SET NAMES 'utf8'"); a la hora de que mostrara los datos pero no a la hora de subirlos a la base de datos.

Suerte!

Última edición por GatorV; 03/02/2009 a las 11:47
  #4 (permalink)  
Antiguo 03/02/2009, 10:15
 
Fecha de Ingreso: mayo-2005
Mensajes: 118
Antigüedad: 18 años, 11 meses
Puntos: 0
Me pierdo en lo del .htaccess ¿donde hay que subirlo?

Genial si que va .. lo acabo de conseguir .. que fácil .. y yo estrujándome la perola !! Graciassssss

Última edición por GatorV; 03/02/2009 a las 11:47
  #5 (permalink)  
Antiguo 04/02/2009, 05:36
Avatar de Anastasiaphp  
Fecha de Ingreso: junio-2006
Ubicación: El patio de mi casa
Mensajes: 196
Antigüedad: 17 años, 10 meses
Puntos: 3
Respuesta: Caracteres raros ...

Problemas en algunas páginas:

Las páginas que vuelcan los datos de la base de datos, sí me está interpretando bien los caracteres (tanto en el código como en el navegador); pero si el texto está escrito en una página html, me aparece el rombo con la interrogación.

¿Alguien sabe a qué puede ser debido?

Comentarios: mi servidor está en iso-8859-1, pero no puedo cambiarlo porque hay otras webs, aunque como digo en otro mensaje, tengo subido el .htaccess con la directiva AddDefaultCharset utf-8, y todas las páginas html o php tienen en la cabecera <meta http-equiv="content-type" content="text/html; charset=UTF-8">

Gracias a todos. A ver si consigo solucionar esto que me trae de cabeza
  #6 (permalink)  
Antiguo 04/02/2009, 10:27
Avatar de Anastasiaphp  
Fecha de Ingreso: junio-2006
Ubicación: El patio de mi casa
Mensajes: 196
Antigüedad: 17 años, 10 meses
Puntos: 3
Respuesta: Caracteres raros ...

He encontrado el problema pero no la solución:

El problema ocurre cuando es un include php y de que haya habido alguna conexión a la base de datos (aunque el texto de la base de datos si lo pone bien) ¿alguna idea?
  #7 (permalink)  
Antiguo 06/02/2009, 10:56
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Sonrisa Respuesta: Caracteres raros ...

Anatasia: me salvastes la vida con lo de la codificacion en la DB

El rombito lo ves por otro motivo y te digo como lo solucioné yo en los sitios donde muestro noticias (independientemente de si estan almacenadas en una DB o en un archivo de texto) - simplemente usa crossUrlDecode()

Código PHP:
<?php
$texto_ok 
crossUrlDecode($texto);
?>
Donde la funcion crossUrlDecode() es un aporte que se hizo en PHP.net y es este el code:

Código PHP:
<?
function crossUrlDecode($source) {
// arregla acentos!
    
$decodedStr '';
    
$pos 0;
    
$len strlen($source);
    while (
$pos $len) {
        
$charAt substr ($source$pos1);
        if (
$charAt == 'Ã') {
            
$char2 substr($source$pos2);
            
$decodedStr .= htmlentities(utf8_decode($char2),ENT_QUOTES,'ISO-8859-1');
            
$pos += 2;
        }
        elseif(
ord($charAt) > 127) {
            
$decodedStr .= "&#".ord($charAt).";";
            
$pos++;
        }
        elseif(
$charAt == '%') {
            
$pos++;
            
$hex2 substr($source$pos2);
            
$dechex chr(hexdec($hex2));
            if(
$dechex == 'Ã') {
                
$pos += 2;
                if(
substr($source$pos1) == '%') {
                    
$pos++;
                    
$char2a chr(hexdec(substr($source$pos2)));
                    
$decodedStr .= htmlentities(utf8_decode($dechex $char2a),ENT_QUOTES,'ISO-8859-1');
                }
                else {
                    
$decodedStr .= htmlentities(utf8_decode($dechex));
                }
            }
            else {
                
$decodedStr .= $dechex;
            }
            
$pos += 2;
        }
        else {
            
$decodedStr .= $charAt;
            
$pos++;
        }
    }
    return 
$decodedStr;
}
?>
Voy a colocar la forma en que solucione el problema que tuve en mi hilo porque me base en el paso-1 de tu solucion y despues tome otro camino

Gracias de nuevo!!!!!! y besos
__________________
Salu2!

Última edición por Italico76; 06/02/2009 a las 11:32
  #8 (permalink)  
Antiguo 09/02/2009, 16:44
Avatar de Anastasiaphp  
Fecha de Ingreso: junio-2006
Ubicación: El patio de mi casa
Mensajes: 196
Antigüedad: 17 años, 10 meses
Puntos: 3
Respuesta: Caracteres raros ...

Gracias por el aporte, Itálico, no he visto tu mensaje a tiempo y al final lo puse todo en ISO de nuevo, en cualquier caso, lo voy a necesitar en breve para otro web, así que lo probaré.

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 11:33.