Foros del Web » Programando para Internet » PHP »

Evitar doble conversión a UTF-8

Estas en el tema de Evitar doble conversión a UTF-8 en el foro de PHP en Foros del Web. Hola a todos. En mi web utilizo UTF-8, por lo que todos los datos que recibe de variables que estén en ISO-8859-1 deben ser convertidos ...
  #1 (permalink)  
Antiguo 20/06/2007, 09:59
 
Fecha de Ingreso: diciembre-2005
Ubicación: Redondela (Galicia)
Mensajes: 368
Antigüedad: 18 años, 4 meses
Puntos: 1
Pregunta Evitar doble conversión a UTF-8

Hola a todos.

En mi web utilizo UTF-8, por lo que todos los datos que recibe de variables que estén en ISO-8859-1 deben ser convertidos a UTF-8. El problema surge con ciertos datos que pueden llegar en ISO-8859-1 o UTF-8 (según el navegador del usuario, por ejemplo), ya que si les aplico indistintamente el utf8_encode, los que ya estuvieran en UTF-8 se deforman.

¿Cómo puedo saber en qué codificación está una cadena de texto?
  #2 (permalink)  
Antiguo 20/06/2007, 10:07
Avatar de pzin
Moderata 😈
 
Fecha de Ingreso: julio-2002
Ubicación: Islas Canarias
Mensajes: 10.488
Antigüedad: 21 años, 9 meses
Puntos: 2114
Re: Evitar doble conversión a UTF-8

Hola Sanva.

No sé si te servirá forzar la codificación del navegador a UTF-8, prueba a ver.
Código PHP:
header('Content-Type: text/html; charset=UTF-8'); 
  #3 (permalink)  
Antiguo 20/06/2007, 11:08
 
Fecha de Ingreso: diciembre-2005
Ubicación: Redondela (Galicia)
Mensajes: 368
Antigüedad: 18 años, 4 meses
Puntos: 1
Re: Evitar doble conversión a UTF-8

No, acabo de probarlo y no me funciona.

Un ejemplo de donde no puedo saber en qué codificación van a llegar las variables es cuando el usuario hace click en un enlace HTML que manda información GET. Como ejemplo, http://www.server.com/?s=Vídeo; Si el usuario tiene Konqueror o Firefox en Linux la variable s llegará al script PHP codificada en UTF-8, pero en Firefox, Opera e IE en Windows e IE en Windows Mobile llegará codificada en ASCII (todo esto probado por mí, supongo que cada usuario podrá cambiar esto en su sistema)
  #4 (permalink)  
Antiguo 23/06/2007, 02:29
 
Fecha de Ingreso: diciembre-2005
Ubicación: Redondela (Galicia)
Mensajes: 368
Antigüedad: 18 años, 4 meses
Puntos: 1
Información Re: Evitar doble conversión a UTF-8

Bueno, posteo yo mismo la solución por si a alguien le sirve

Código PHP:
function is_utf8($string) {
    
// From http://w3.org/International/questions/qa-forms-utf-8.html
    
return preg_match('%^(?:
          [\x09\x0A\x0D\x20-\x7E]            # ASCII
        | [\xC2-\xDF][\x80-\xBF]             # non-overlong 2-byte
        |  \xE0[\xA0-\xBF][\x80-\xBF]        # excluding overlongs
        | [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}  # straight 3-byte
        |  \xED[\x80-\x9F][\x80-\xBF]        # excluding surrogates
        |  \xF0[\x90-\xBF][\x80-\xBF]{2}     # planes 1-3
        | [\xF1-\xF3][\x80-\xBF]{3}          # planes 4-15
        |  \xF4[\x80-\x8F][\x80-\xBF]{2}     # plane 16
    )*$%xs'
$string);

Esa función comprobará si la cadena que se le pasa como argumento está en UTF-8 o no.

La encontré en los comentarios de la función mb_detect_encoding
en http://es.php.net/manual/es/function...t-encoding.php. Al parecer es una traducción a PHP de la misma función propuesta por el W3C aquí: http://w3.org/International/question...rms-utf-8.html
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 21:44.