Control de usuario
Patrocinadores
Estadísticas
Miembros:
334.570
Online:
1.575
Hilos:
1.380.623
Mensajes:
24.877.876
Stats

Índice de foros Generales Feedback Fallos y problemas técnicos

Error General

¿Algo no funciona bien en la web? Avísanos aquí.

Moderadores: jiXo, melado

Reglas del foro
Foro para organizar todos los fallos de funcionamiento de la web. Un hilo por fallo; antes de crear un nuevo hilo comprueba que no exista ya uno similar.

Si es posible y es relevante para el fallo, indica qué versión de navegador utilizas, sistema operativo, una captura, o cualquier dato que pueda ser necesario.

Gracias por la ayuda.
socram8888
Avatar de usuario
lol socram pole
 
Mensajes: 2717
Registrado: 06 May 2007
Ubicación: Valencia

Error General

Mensajepor socram8888 01 Ago 2011 19:54

Imagen
Así es como queda la ventana probando los caracteres Unicode Imagen

He estado investigando y lo que fastidia todo son unos cuantos caracteres que son Unicode de 32 bit con esta forma (hex): 0xD850xxxx, donde xxxx va desde 0xDC00 hasta 0xDFFF. No sé si habrán algunos más

Puedes probarlo con
Código: Seleccionar todo
javascript:prompt("",String.fromCharCode(0xD850,0xDC00));void(0);
que muestra uno de estos caracteres "prohibidos"

melado
Avatar de usuario
 
 
Staff
Administrador
 
Mensajes: 7502
Registrado: 01 Ago 2001

Mensajepor melado 01 Ago 2011 23:24

El foro no acepta caracteres que no son UTF-8 válido.

socram8888
Avatar de usuario
lol socram pole
 
Mensajes: 2717
Registrado: 06 May 2007
Ubicación: Valencia

Mensajepor socram8888 02 Ago 2011 10:15

melado escribió:El foro no acepta caracteres que no son UTF-8 válido.

Sí es un UTF-8 válido:
Imagen
Si no fuera válido, no se mostraría correctamente. Y además, si te fijas son dos caracteres Unicode distintos (0xD850 y después 0xDxxx)

E incluso el foro los codifica correctamente:
Imagen
El texto de abajo es la codificación que me hace el Bloc de Notas visto en un editor hexadecimal

melado
Avatar de usuario
 
 
Staff
Administrador
 
Mensajes: 7502
Registrado: 01 Ago 2001

Mensajepor melado 02 Ago 2011 16:05

El carácter de ejemplo que pones es el U+24000, si no me equivoco. UTF-8 sólo admite los caracteres por debajo de U+10FFFF. Así que aunque los navegadores pueden interpretarlo, no es UTF-8 válido: un navegador tiene que hacer malabares para reconocer los datos que recibe, así que no me extrañaría que interpretase como UTF-16 (o lo que sea) aunque tú le obligues a hacerlo como UTF-8. Sin embargo, una base de datos como MySQL tiene que ser estricta a la hora de almacenar los datos. Si no es válido, da error sin más.

Lo que sí que habría que mejorar de alguna manera es la forma en la que se responde al usuario ante un error de este tipo, porque acabo de probar en el área de pruebas de phpbb.com y casca con el mismo error...

socram8888
Avatar de usuario
lol socram pole
 
Mensajes: 2717
Registrado: 06 May 2007
Ubicación: Valencia

Mensajepor socram8888 05 Sep 2011 22:13

Oye melado, que acabo de caer: 0x02.40.00 esta por debajo del limite de 0x10.FF.FF xD

EDIT: No se si habreis tocado algo relacionado, pero al parecer ya funciona :?

EDIT2: No he dicho nada. Sigue fallando. Se ve que al móvil no le gustaba el caracter y no me lo pegaba bien xD

melado
Avatar de usuario
 
 
Staff
Administrador
 
Mensajes: 7502
Registrado: 01 Ago 2001

Mensajepor melado 07 Sep 2011 01:12

http://en.wikipedia.org/wiki/UTF-8#Invalid_code_points
UTF-16 limits Unicode to 10FFFFhex; therefore UTF-8 is not defined beyond that value, even if it could easily be defined to reach 7FFFFFFFhex.

Metí yo la pata al decir que estaba limitado a U+10FFFF. A lo que está limitado es a 0x10FFFF (que no es lo mismo, el primero es la posición en una tabla y el segundo una serie de bytes), y claramente tu F0 A4 80 80 >> 10 FF FF.

socram8888
Avatar de usuario
lol socram pole
 
Mensajes: 2717
Registrado: 06 May 2007
Ubicación: Valencia

Mensajepor socram8888 09 Sep 2011 10:07

Prueba esto melado:
Código: Seleccionar todo
<?php

$orig = "\x00\x02\x40\x00";
echo "Original en UTF-32: 0x" . bin2hex($orig) . " (el caracter que hace petar el foro)\n";
echo "Codificado a UTF-8: 0x" . bin2hex(mb_convert_encoding($orig, "UTF-8", "UTF-32BE")) . " (no peta, se codifica bien)\n";

$orig = "\x00\x10\xff\xff";
echo "Original en UTF-32: 0x" . bin2hex($orig) . " (limite de Unicode)\n";
echo "Codificado a UTF-8: 0x" . bin2hex(mb_convert_encoding($orig, "UTF-8", "UTF-32BE")) . " (es codificado correctamente)\n\n";

$orig = "\x00\x11\x00\x00";
echo "Original en UTF-32: 0x" . bin2hex($orig) . " (limite de Unicode + 1)\n";
echo "Codificado a UTF-8: 0x" . bin2hex(mb_convert_encoding($orig, "UTF-8", "UTF-32BE")) . " (es un caracter ilegal, asi que no se codifica)\n\n";

?>

Es una prueba que codifica en PHP el código que hace petar el foro. El límite de Unicode no es 0x10FFFF una vez ya codificado, sino antes de codificar (es decir, en UTF-32, su interpretación real).

El primero es el código que hace petar el foro (0x00024000), que es codificado correctamente. El segundo es el caracter límite de Unicode que si te fijas está por encima del 0x00024000 y también es codificado correctamente. El tercero es uno por encima del límite para demostrar que es 0x10FFFF antes de la codificación. Peta y devuelve una cadena vacía

EDIT: Y mira esto: http://www.utf8-chartable.de/unicode-ut ... number=256 que pone U+24000 (en UTF-32) y al lado su representación

EDIT2: Es culpa de MySQL: http://dev.mysql.com/doc/refman/5.1/en/ ... -utf8.html sí que es un UTF-8 válido, pero se ve que MySQL simplemente no lo soporta

melado
Avatar de usuario
 
 
Staff
Administrador
 
Mensajes: 7502
Registrado: 01 Ago 2001

Mensajepor melado 09 Sep 2011 15:55

Buena investigación [oki]
El soporte Unicode/UTF-8 en MySQL siempre fue un poco de chiste... me temo que no podemos hacer mucho más. Tú procura no escribir en chino y ya está XD

Mensajepor ðaaaaa 09 Sep 2011 18:42

Mensaje borrado


Volver a Fallos y problemas técnicos

¿Quién está conectado?

Usuarios navegando por este foro: No hay usuarios registrados visitando el foro y 0 invitados