Foros del Web » Programando para Internet » Javascript » Frameworks JS »

Problemas con Ñ, tildes, etc (2)

Estas en el tema de Problemas con Ñ, tildes, etc (2) en el foro de Frameworks JS en Foros del Web. Bueno parece que somos muchos los que tenemos problemas con este tema... - Todas las tables de MySQL usan charset latin1 y el servicio de ...
  #1 (permalink)  
Antiguo 20/07/2009, 23:57
 
Fecha de Ingreso: noviembre-2004
Ubicación: Buenos Aires
Mensajes: 34
Antigüedad: 19 años, 5 meses
Puntos: 0
Problemas con Ñ, tildes, etc (2)

Bueno parece que somos muchos los que tenemos problemas con este tema...

- Todas las tables de MySQL usan charset latin1 y el servicio de mySql también (configurado en el único my.ini/cnf que tengo)

- Todas las páginas HTML tienen en el HEAD el content type:
<meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1" />

Utilizo PHP y hago idas y vueltas de datos usando AJAX...

Y el problema, lo de siempre: los caracteres especiales se guardan mal; por ejemplo, la palabra ÑANDÚ se almacena ÑANDÊ y la palabra PINGÜINO resulta PINGÃŒINO. Digo que solo se almacenan mal porque si lo corrigo en la BD entonces en el sitio se muestran bien.

Desde el cliente uso ajax para enviarle los datos del form al script php encargado de guardar los datos. Les dejo el fragmento de javascript:

var url = $urlGet('../tarea/guardarDatosPersonales.php', idForm);
$Ajax(url, {
onfinish: registracionOK,
onerror: registracionError,
tipoRespuesta: $tipo.JSON
});

Uso la biblioteca prototype en combinación con el script para trabajar con ajax que está en esta página: http: // www . informaticaunlam . com. a r/?page_id=22 (espero que no sea considerado SPAM)

Ya del lado del servidor la página php que guarda los datos simplemente lee los datos recibidos y (finalmente luego de validaciones y cosas aburridas;) arma la consulta SQL para hacer el INSERT y la ejecuta.

$V1 = $_GET['V1'];
$V2 = $_GET['V2'];
...
$Vn = $_GET['Vn'];
...
$insert = "INSERT INTO usuario (D1,D2,...,Dn) VALUES ($V1,$V2,...,$VN);
$rsMySQL = mysql_query($insert, $conexion);

----- inicio de la edición -----

Sería importante aclarar que ya, en este punto, en el string de la consulta los caracteres extraños aparecieron... eso es que el error está cuando se envian los campos (en el AJAX) o bien cuando los lee el PHP.

----- fin de la edición -----

Bueno, esto con mucho resumen pero tratando no olvidarme de nada es todo. Pro lógica todo está configurado para usar el mismo charset así que no entiendo cuál es el problema...

Cualquier ayuda, guia y/o comentario es bienvenido.

Gracias de antemano! Diego

Última edición por diegoturriaga; 21/07/2009 a las 00:05
  #2 (permalink)  
Antiguo 21/07/2009, 00:22
Avatar de bioxido  
Fecha de Ingreso: diciembre-2008
Ubicación: $_SERVER['PHP_SELF']
Mensajes: 601
Antigüedad: 15 años, 5 meses
Puntos: 21
Respuesta: Problemas con Ñ, tildes, etc (2)

usa htmlentities que para algo lo inventaron.
  #3 (permalink)  
Antiguo 21/07/2009, 01:01
 
Fecha de Ingreso: septiembre-2007
Ubicación: PyRoot
Mensajes: 1.515
Antigüedad: 16 años, 7 meses
Puntos: 188
Respuesta: Problemas con Ñ, tildes, etc (2)

pero no funcionaa!!!!!!! a mi no me ha funcionado =S
__________________
Si quieres agradecer el triangulo obscuro de la parte derecha debes presionar +.
  #4 (permalink)  
Antiguo 21/07/2009, 02:10
 
Fecha de Ingreso: septiembre-2007
Ubicación: PyRoot
Mensajes: 1.515
Antigüedad: 16 años, 7 meses
Puntos: 188
Respuesta: Problemas con Ñ, tildes, etc (2)

Hola amigo, ya encontre una solucion, saludos

Código PHP:
<?
//INICIO DE LA COMPROBACION DE CARACTERES ESPECIALES
    
class unicode_replace_entities {
        public function 
UTF8entities($content="") {
            
$contents $this->unicode_string_to_array($content);
            
$swap "";
            
$iCount count($contents);
            for (
$o=0;$o<$iCount;$o++) {
                
$contents[$o] = $this->unicode_entity_replace($contents[$o]);
                
$swap .= $contents[$o];
            }
            return 
mb_convert_encoding($swap,"UTF-8");
        }

        public function 
unicode_string_to_array$string ) { 
            
$strlen mb_strlen($string);
            while (
$strlen) {
                
$array[] = mb_substr$string01"UTF-8" );
                
$string mb_substr$string1$strlen"UTF-8" );
                
$strlen mb_strlen$string );
            }
            return 
$array;
        }

        public function 
unicode_entity_replace($c) { 
            
$h ord($c{0});   
            if (
$h <= 0x7F) {
                return 
$c;
            } else if (
$h 0xC2) {
                return 
$c;
            }
           
            if (
$h <= 0xDF) {
                
$h = ($h 0x1F) << | (ord($c{1}) & 0x3F);
                
$h "&#" $h ";";
                return 
$h;
            } else if (
$h <= 0xEF) {
                
$h = ($h 0x0F) << 12 | (ord($c{1}) & 0x3F) << | (ord($c{2}) & 0x3F);
                
$h "&#" $h ";";
                return 
$h;
            } else if (
$h <= 0xF4) {
                
$h = ($h 0x0F) << 18 | (ord($c{1}) & 0x3F) << 12 | (ord($c{2}) & 0x3F) << | (ord($c{3}) & 0x3F);
                
$h "&#" $h ";";
                return 
$h;
            }
        }
    }
####################### FIN DE LA COMPROBACION de letras especiales
    
$content $_POST['texto'];
    
$oUnicodeReplace = new unicode_replace_entities();
    
$content $oUnicodeReplace->UTF8entities($content);

echo 
$content;
// casi olvido cerrar con ? > jaja
?>
__________________
Si quieres agradecer el triangulo obscuro de la parte derecha debes presionar +.
  #5 (permalink)  
Antiguo 21/07/2009, 14:37
 
Fecha de Ingreso: noviembre-2004
Ubicación: Buenos Aires
Mensajes: 34
Antigüedad: 19 años, 5 meses
Puntos: 0
Respuesta: Problemas con Ñ, tildes, etc (2)

El problema, es que o mucho me equivoco o eso no se soluciona con hacer:

$V1 = htmlentities($_GET['V1']);
$V2 = htmlentities($_GET['V2']);
...
$Vn = htmlentities($_GET['Vn']);

aclaro: no lo he probado, pero me niego a probarlo por que el uso de htmlentities es para convertir los caracteres codificados en html a su representación ASCII y este no es el caso.

La Ñ no la veo como &Ntilde; sino como Ñ

El proplema me parece que esta en la forma en que estoy trabajando con ajax... recuerdo haber usado en algun momento algo así com urlencode y urldecode... bueno, puebo y os cuento.
  #6 (permalink)  
Antiguo 21/07/2009, 15:32
 
Fecha de Ingreso: noviembre-2004
Ubicación: Buenos Aires
Mensajes: 34
Antigüedad: 19 años, 5 meses
Puntos: 0
Respuesta: Problemas con Ñ, tildes, etc (2)

Les cuento... en javascript antes de pasar los parámetros ajax utilizo escape(var) para preparar el texto. En php cuando leo los parámetros hago urldecode($_GET['var']) pero aún así sigo con el mismo error... los caracteres Ñ á é í ó ú ü û etc los recibo mal... y no se porque
  #7 (permalink)  
Antiguo 21/07/2009, 16:25
 
Fecha de Ingreso: septiembre-2007
Ubicación: PyRoot
Mensajes: 1.515
Antigüedad: 16 años, 7 meses
Puntos: 188
Respuesta: Problemas con Ñ, tildes, etc (2)

Hola amigos, solo usen el codigo que posteo arriba: http://www.forosdelweb.com/f18/probl...0/#post3013262

y listo!

En aque script se usa adecuadamente htmlentities,
usando este script la ñ si se muestra como &ntilde;


Saludos!
__________________
Si quieres agradecer el triangulo obscuro de la parte derecha debes presionar +.
  #8 (permalink)  
Antiguo 21/07/2009, 16:40
Avatar de bioxido  
Fecha de Ingreso: diciembre-2008
Ubicación: $_SERVER['PHP_SELF']
Mensajes: 601
Antigüedad: 15 años, 5 meses
Puntos: 21
Respuesta: Problemas con Ñ, tildes, etc (2)

y con... htmlspecialchars()?
  #9 (permalink)  
Antiguo 21/07/2009, 16:42
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Problemas con Ñ, tildes, etc (2)

diegoturriaga, no importa la codificacion que tengas en tu base de datos y scripts, hasta donde se, las peticiones ajax se ejecutan con encabezados UTF-8, aunque parece ser que podrias especificar otro:

- Como usar Charset en AJAX
__________________
- León, Guanajuato
- GV-Foto
  #10 (permalink)  
Antiguo 21/07/2009, 20:49
 
Fecha de Ingreso: noviembre-2004
Ubicación: Buenos Aires
Mensajes: 34
Antigüedad: 19 años, 5 meses
Puntos: 0
Respuesta: Problemas con Ñ, tildes, etc (2)

Creo que quedó solucionado! Gracias a todos

Como bien dijeron, el problema estaba en el charset del ajax lo que hice fue codificar* la siguiente función:

function utf8_a_iso8859(&$array) {
foreach ($array as $k => $item) {
if (is_array($item)) {
$array[$k]= utf8_a_iso8859($item);
}
else {
$array[$k] = utf8_decode($item);
}
}
return $array;
}

y luego en el script que recibe los datos ajax antes de comenzar a trabajar con dichos datos puse:

utf8_a_iso8859($_GET);

o bien: utf8_a_iso8859($_POST);

Finalmente resultó:

PHP con charset Latin1
MySQL con charset Latin1
HTML con header Latin1 (ISO8859-1)
y AJAX que transmite y recibe utf8 por lo que al recibir datos uso la función utf8_a_iso8859 y al enviarlos el header("Content-Type: text/plain; charset=ISO-8859-1")
  #11 (permalink)  
Antiguo 21/07/2009, 22:01
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: Problemas con Ñ, tildes, etc (2)

Tema trasladado desde PHP
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 22:05.