2012-07-26 3 views
9

Estoy construyendo una aplicación web PHP, y funciona en UTF-8. La base de datos es UTF-8, las páginas se sirven como UTF-8 y configuro el juego de caracteres usando una metaetiqueta para UTF-8. Por supuesto, con los usuarios que usan Internet Explorer y copian & pegando desde Microsoft Office, de alguna manera logro no recibir UTF-8 de vez en cuando.Mejor método de conversión de entrada de usuario a UTF-8

La solución ideal sería arrojar un error HTTP 400 Bad Request, pero obviamente no puedo hacer eso. La siguiente mejor opción es convertir $_GET, $_POST y $_REQUEST en UTF-8. ¿Hay alguna forma de ver qué codificación de caracteres tiene la entrada para poder pasarla al iconv? Si no, ¿cuál es la mejor solución para hacer esto?

Respuesta

8

Salida mb_detect_encoding() Ejemplo:

$utf8 = iconv(mb_detect_encoding($input), 'UTF-8', $input); 

También hay utf8_encode() si usted garantiza que la cadena se introduce como ISO-8859-1.

+0

Obviamente no puedo garantizar que la cadena sea ISO-8859-1, pero 'mb_detect_encoding()' se ve bien –

0

En algunos casos, solo con utf8_encode o las comprobaciones generales están bien, pero puede perder algunos caracteres dentro de la cadena. Si puede compilar una lista básica de matriz/cadena basada en varios tipos, este ejemplo es Windows, puede salvar un poco más.

if(!mb_detect_encoding($fileContents, "UTF-8", true)){ 
    $checkArr = array("windows-1252", "windows-1251"); 
    $encodeString = ''; 
    foreach($checkArr as $encode){ 
     if(mb_check_encoding($fileContents, $encode)){ 
      $encodeString .= $encode.","; 
     } 
    } 
    $encodeString = substr($encodeString, 0, -1); 
    $fileContents = mb_convert_encoding($fileContents, "UTF-8", $encodeString); 
} 
Cuestiones relacionadas