Foros del Web » Programando para Internet » PHP »

Codificación iso-8859-1 y UTF-8

Estas en el tema de Codificación iso-8859-1 y UTF-8 en el foro de PHP en Foros del Web. Buenas gente, tengo una duda sobre codificación de cadenas y creo que la solución puede estar en el meta, pero he puesto todos los posibles ...
  #1 (permalink)  
Antiguo 30/10/2008, 11:06
 
Fecha de Ingreso: mayo-2007
Mensajes: 9
Antigüedad: 17 años
Puntos: 0
Codificación iso-8859-1 y UTF-8

Buenas gente, tengo una duda sobre codificación de cadenas y creo que la solución puede estar en el meta, pero he puesto todos los posibles valores y nada.

Así que he estado mirando las soluciones a este tipo de problema y lo curioso es que funciona en la php donde hago la consulta, es decir, me devuelve la cadena sin ningún problema de acentos (es decir, simulo una consulta autocompletar.php?tabla=ciudad&texto=leo), pero al realizarla desde la página principal donde en el head está incluido <meta http-equiv="Content-Type" charset="iso-8859-1" content="text/html"/> lanzo la consulta y me devuelve con valores como Le?n, en vez de León.

Por cierto, adelantando otra duda, como puedo recoger palabras con tildes, porque de momento no lo consigo capturar.

Muchísimas gracias de antemano.
  #2 (permalink)  
Antiguo 30/10/2008, 11:17
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Codificación iso-8859-1 y UTF-8

Si la pagina principal usa iso, enconces usa utf8_decode sobre las variables que vienen con formato utf8.

Saludos.
  #3 (permalink)  
Antiguo 30/10/2008, 11:37
 
Fecha de Ingreso: mayo-2007
Mensajes: 9
Antigüedad: 17 años
Puntos: 0
Respuesta: Codificación iso-8859-1 y UTF-8

Cita:
Iniciado por GatorV Ver Mensaje
Si la pagina principal usa iso, enconces usa utf8_decode sobre las variables que vienen con formato utf8.

Saludos.
Antes de todo, gracias por contestar. La función utf8_decode la uso al recoger los datos de la consulta. Funciona, porque cuando llamo a la página php que trata con la base de datos y me devuelve la consulta, los acentos funcionan correctamente.

Sin embargo, cuando recoge escribo el $xml en mi index.php, pues me dice que tu tía. Así es que no entiendo lo que pasa. (No me quiero ni imaginar si esto le pasara a un chino o japonés)

Gracias.

Si necesitáis la dirección de la página de pruebas avisadme.

Código:
<?php

include('conexion.php');
//include('tratar_cadenas.php');

$tabla = strtoupper($_GET["tabla"]);
$texto = strtolower($_GET["texto"]);

$id = $_GET["id"];

//Por si se escribe sin acentos
$texto = ereg_replace("a|e|i|o|u", "_", $texto);

//Para que las estaciones comiencen con Estación de
    if($tabla=='ESTACION') $sql = "SELECT NOMBR FROM `ESTACION` WHERE LOWER(nombr) LIKE '%".$texto."%' ORDER BY NOMBR";
    else $sql = "SELECT NOMBR FROM `".$tabla."` WHERE LOWER(nombr) LIKE '".$texto."%' ORDER BY NOMBR";

$resCiud = mysql_query($sql, $conexion) or die(mysql_error());
$totCiud = mysql_num_rows($resCiud);
$aux=0;

while($row=mysql_fetch_object($resCiud)){
    $datos[$aux]=utf8_decode($row->NOMBR);
    $aux+=1;
}

$aux = 0;
$xml="";
if($totCiud>0){    
    foreach ($datos as $dato) {
        
            $xml.="<div class=\"dato\" onmouseout=\"deseleccionar(this);\" onmouseover=\"seleccionar(this);\" onclick=\"plegar('".$id."','".$dato."');\">".$dato."</div>";
        }
}

echo $xml;	

?>
  #4 (permalink)  
Antiguo 30/10/2008, 11:49
Avatar de gildus  
Fecha de Ingreso: agosto-2003
Mensajes: 1.495
Antigüedad: 20 años, 8 meses
Puntos: 105
Respuesta: Codificación iso-8859-1 y UTF-8

Holas,

Revisastes esto amigo?:

http://www.php.net/manual/es/functio...ecialchars.php

Saludos
Gildus
__________________
.: Gildus :.
  #5 (permalink)  
Antiguo 30/10/2008, 12:20
 
Fecha de Ingreso: mayo-2007
Mensajes: 9
Antigüedad: 17 años
Puntos: 0
Respuesta: Codificación iso-8859-1 y UTF-8

Cita:
Iniciado por gildus Ver Mensaje
Holas,

Revisastes esto amigo?:


Saludos
Gildus
Lo probé, pero el único cambio apreciable fue que al llamar desde index.php no sale la capa, y llamándola desde el php donde maneja la consulta sale todo el código de la capa. Mmm. Creo que lo que voy a hacer va a ser codificar los datos de la forma &Aacute; para Á, etc...

Ya colgaré la solución que siempre sirve de ayuda.

Saludos.
  #6 (permalink)  
Antiguo 30/10/2008, 13:01
 
Fecha de Ingreso: octubre-2008
Mensajes: 3
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: Codificación iso-8859-1 y UTF-8

Yo tuve ese problema cuando añadi a mis proyectos XAJAX.


Si no usas xajax ó ajax ( yo es que no trabajo con ajax a pelo, uso la libreria de xajax) no tienes que hacer nada , simplemente poner bien los headers y ya esta

<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es">
<head>
<meta name="Content-Type" content="text/html; charset=iso-8859-1" />
.....
</head>

Si usas xajax antes de registrar las funciones debes poner:
$xajax->setCharEncoding("iso-8859-1");
$xajax->decodeUTF8InputOn();
  #7 (permalink)  
Antiguo 30/10/2008, 13:02
 
Fecha de Ingreso: mayo-2007
Mensajes: 9
Antigüedad: 17 años
Puntos: 0
Respuesta: Codificación iso-8859-1 y UTF-8

Bueno aquí está la función con las principales letras que se usan en la península, sin embargo, voy a probar si encuentro alguna función parecida a la que has puesto, Gildus. De todas formas, creo que es problema de como lo codifica el UTF

Código:
function acentuar($msg){
    $msg = ereg_replace("á","&aacute;", $msg);
    $msg = ereg_replace("é","&eacute;", $msg);
    $msg = ereg_replace("í","&iacute;", $msg);
    $msg = ereg_replace("ó","&oacute;", $msg);
    $msg = ereg_replace("ú","&uacute;", $msg);
    $msg = ereg_replace("Á","&Aacute;", $msg);
    $msg = ereg_replace("É","&Eacute;", $msg);
    $msg = ereg_replace("Í","&Iacute;", $msg);
    $msg = ereg_replace("Ó","&Oacute;", $msg);
    $msg = ereg_replace("Ú","&Uacute;", $msg);
    $msg = ereg_replace("ñ","&ntilde;", $msg);
    $msg = ereg_replace("Ñ","&Ntilde;", $msg);
    $msg = ereg_replace("à","&agrave;", $msg);
    $msg = ereg_replace("À","&Agrave;", $msg);
    $msg = ereg_replace("Ç","&Ccedil;", $msg);
    $msg = ereg_replace("ç","&ccedil;", $msg);
    $msg = ereg_replace("ï","&iuml;", $msg);
    $msg = ereg_replace("Ï","&Iuml;", $msg);
    $msg = ereg_replace("ò","&ograve;", msg);
    $msg = ereg_replace("Ò","&Ograve;",  $msg);
    $msg = ereg_replace("ü","&uuml;",  $msg);
    $msg = ereg_replace("Ü","&Uuml;",  $msg);
    return $msg;
}
  #8 (permalink)  
Antiguo 30/10/2008, 13:04
 
Fecha de Ingreso: mayo-2007
Mensajes: 9
Antigüedad: 17 años
Puntos: 0
Respuesta: Codificación iso-8859-1 y UTF-8

Vale gracias. La clave debe de ser que a la página php uso ajax. Voy a hacer una revisión a mi código, gracias.

Cita:
Iniciado por mayik81 Ver Mensaje
Yo tuve ese problema cuando añadi a mis proyectos XAJAX.


Si no usas xajax ó ajax ( yo es que no trabajo con ajax a pelo, uso la libreria de xajax) no tienes que hacer nada , simplemente poner bien los headers y ya esta

<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es">
<head>
<meta name="Content-Type" content="text/html; charset=iso-8859-1" />
.....
</head>

Si usas xajax antes de registrar las funciones debes poner:
$xajax->setCharEncoding("iso-8859-1");
$xajax->decodeUTF8InputOn();
  #9 (permalink)  
Antiguo 31/10/2008, 11:36
 
Fecha de Ingreso: mayo-2007
Mensajes: 9
Antigüedad: 17 años
Puntos: 0
Respuesta: Codificación iso-8859-1 y UTF-8

Bueno, he estado quitando y poniendo cosas en el javascript y todavía no he conseguido nada. No encuentro ninguna función análoga a setCharEncoding() ni a
decodeUTF8InputOn() para aplicarla en ajax (o al menos ni idea de cómo usarla). Como último recurso cambiaría el .js por lo de xajax (aunque me tocaría transformarlo todo y de paso aprenderlo ;) ) Coloco el código por si a alguna alma cándida se le ocurre alguna solución. Gracias

Código:
function crearObjetoAjax(){
    var xmlhttp=false; 
    try{ 
        // Creacion del objeto AJAX para navegadores no IE
        xmlhttp=new ActiveXObject("Msxml2.XMLHTTP"); 
    }
    catch(e){ 
        try  { 
            // Creacion del objet AJAX para IE 
            xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
        } 
        catch(E) { xmlhttp=false; }
    }
    if (!xmlhttp && typeof XMLHttpRequest!="undefined") { xmlhttp=new XMLHttpRequest(); } 
    
    return xmlhttp; 
}

function hola(obj,tabla) {
        
    recolocar(obj.id);
    // Obtener la instancia del objeto XMLHttpRequest
    peticion_http=crearObjetoAjax();
        
    // Preparar la funcion de respuesta
    peticion_http.onreadystatechange = muestraContenido;
    var miUrl="autocompletar.php"
    var parametros="texto="+decodificar_b(obj.value)+"&tabla="+tabla+"&id="+obj.id;
    
    // Realizar peticion HTTP
    peticion_http.open("POST", miUrl, true);
    peticion_http.setRequestHeader('content-type', 'application/x-www-form-urlencoded;charset=UTF-8');
    peticion_http.send(parametros);
    
    
    ////modificado
    http.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=utf-8');
    peticion_http.send(null);
    function muestraContenido() {
        if(peticion_http.readyState == 4) {
            if(peticion_http.status == 200) {
                lista=document.getElementById('hola2');
                lista.innerHTML=peticion_http.responseText;
                aux = 20*lista.getElementsByTagName('div').length;
                if(aux>100) aux=120;
                lista.style.height=aux+'px';
                lista.style.display="block";
                if(aux==0) lista.style.display="none";
            }
        }
    }
}
Por cierto, al que le sirva el código que lo coja sin problemas. Saludos.



Cita:
Iniciado por mayik81 Ver Mensaje
Yo tuve ese problema cuando añadi a mis proyectos XAJAX.


Si no usas xajax ó ajax ( yo es que no trabajo con ajax a pelo, uso la libreria de xajax) no tienes que hacer nada , simplemente poner bien los headers y ya esta

<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es">
<head>
<meta name="Content-Type" content="text/html; charset=iso-8859-1" />
.....
</head>

Si usas xajax antes de registrar las funciones debes poner:
$xajax->setCharEncoding("iso-8859-1");
$xajax->decodeUTF8InputOn();
  #10 (permalink)  
Antiguo 01/11/2008, 10:54
Avatar de Deschamps  
Fecha de Ingreso: octubre-2008
Mensajes: 257
Antigüedad: 15 años, 6 meses
Puntos: 8
Respuesta: Codificación iso-8859-1 y UTF-8

Cita:
Iniciado por urko1982 Ver Mensaje
Código:
function acentuar($msg){
    $msg = ereg_replace("á","&aacute;", $msg);
    $msg = ereg_replace("é","&eacute;", $msg);
    $msg = ereg_replace("í","&iacute;", $msg);
    $msg = ereg_replace("ó","&oacute;", $msg);
    $msg = ereg_replace("ú","&uacute;", $msg);
    $msg = ereg_replace("Á","&Aacute;", $msg);
    $msg = ereg_replace("É","&Eacute;", $msg);
    $msg = ereg_replace("Í","&Iacute;", $msg);
    $msg = ereg_replace("Ó","&Oacute;", $msg);
    $msg = ereg_replace("Ú","&Uacute;", $msg);
    $msg = ereg_replace("ñ","&ntilde;", $msg);
    $msg = ereg_replace("Ñ","&Ntilde;", $msg);
    $msg = ereg_replace("à","&agrave;", $msg);
    $msg = ereg_replace("À","&Agrave;", $msg);
    $msg = ereg_replace("Ç","&Ccedil;", $msg);
    $msg = ereg_replace("ç","&ccedil;", $msg);
    $msg = ereg_replace("ï","&iuml;", $msg);
    $msg = ereg_replace("Ï","&Iuml;", $msg);
    $msg = ereg_replace("ò","&ograve;", msg);
    $msg = ereg_replace("Ò","&Ograve;",  $msg);
    $msg = ereg_replace("ü","&uuml;",  $msg);
    $msg = ereg_replace("Ü","&Uuml;",  $msg);
    return $msg;
}



¿No acabarías antes con algo así?

Código:
$msg = htmlentities( $msg, ENT_QUOTES );
Por cierto, que mis problemas con esto vinieron editando el código. Cuando uso Windows (Notepad++) y guardo codificando el archivo en UTF-8... luego en el navegador los caracteres acentuados salen mal (se pasa por el forro el charset definido). Simplemente cambiando a codificación ANSI (para el código fuente), todo siguió como la seda. Los archivos subidos al servidor se ven perfectamente.

Un saludo.
  #11 (permalink)  
Antiguo 02/11/2008, 10:37
(Desactivado)
 
Fecha de Ingreso: mayo-2008
Mensajes: 67
Antigüedad: 16 años
Puntos: 0
Respuesta: Codificación iso-8859-1 y UTF-8

todo se resume en esto

Código PHP:
utf8_encode($msg); 
eso era todo lo que tenias que hacer y listo funciona bueno ami me funciono
  #12 (permalink)  
Antiguo 09/11/2008, 12:57
 
Fecha de Ingreso: mayo-2007
Mensajes: 9
Antigüedad: 17 años
Puntos: 0
Respuesta: Codificación iso-8859-1 y UTF-8

Cita:
Iniciado por mayik81 Ver Mensaje
Yo tuve ese problema cuando añadi a mis proyectos XAJAX.


Si no usas xajax ó ajax ( yo es que no trabajo con ajax a pelo, uso la libreria de xajax) no tienes que hacer nada , simplemente poner bien los headers y ya esta

<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es">
<head>
<meta name="Content-Type" content="text/html; charset=iso-8859-1" />
.....
</head>

Si usas xajax antes de registrar las funciones debes poner:
$xajax->setCharEncoding("iso-8859-1");
$xajax->decodeUTF8InputOn();
Hola de nuevo,
Estoy trabajando en el problema de los acentos y en breve tendré la nueva versión, simplemente y como esto es importante señalar que en las nuevas versiones de xajax se utiliza lo siguiente para los acentos.

Código:
$xajax = new xajax();
$xajax->setCharEncoding("iso-8859-1");
$xajax->configure('decodeUTF8Input',true);
Bueno, y muchas gracias de nuevo por las aportaciones.
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 10:44.