2011-02-04 33 views
5

En mi sitio web hay un formulario con un área de texto simple para que la gente publique comentarios. El problema es que a veces recibo información en uft8 y otras veces en iso. ¿Es posible controlar eso?php form submit utf8?

Quizás estoy haciendo algo mal, pero ¿es posible que el navegador cambie la codificación de los datos que envía?

gracias

+0

posible duplicado de [¿Cómo sabes lo que codifica el usuario es inputing en el navegador?] (Http: // stackoverflow .com/questions/4559564/how-you-know-what-encoding-the-user-is-inputing-into-browser) –

Respuesta

16

Si usted quiere estar seguro de lo que juego de caracteres que está aceptando, lo puso en su forma

<form method="post" action="/your/url/" accept-charset="UTF-8"> 
</form> 

Se puede ver todo el carácter aceptable establece aquí: Character Sets

+0

me encanta esto, pero ¿es cierto que no funciona en IE? –

+1

Creo que es todo lo contrario que no funciona. Si mal no recuerdo, IE respetará UTF-8, pero si configuras tu charset en ISO, fallará. Esto solo cuenta en nuevas versiones. También puede establecer el juego de caracteres de la página como se menciona ayush para estar seguro también. –

3

siempre puedes forzar a UTF-8. Luego puede enviar, recibir y almacenar datos en la tapa del anuncio UTF-8 en la mayoría de los idiomas humanos sin tener que cambiar el conjunto de caracteres.

<meta http-equiv="Content-type" content="text/html; charset=utf-8"/> 
+0

gracias, agregaré esto también, pero ... ¿es utf-81 o utf-8? –

+0

Es utf-8. No hay un utf-81. – Michael

-1

¿Tiene testes con múltiples navegadores diferentes si el problema ocurre en todos/algunos de ellos o solo en IE?

+0

la mayoría de nuestros problemas vienen solo en IE ... –

-3

Puede codificar los datos $ _POST en UTF-8 usando la función utf8_encode de PHP.

Algo así como:

$_POST['comments'] = utf8_encode($_POST['comments']); 
+0

esto codificaría doblemente el contenido que ya se envió como utf-8. – cweiske

+0

Urgh. Cierto. Si desea utilizar PHP para codificar, esto (http://stackoverflow.com/questions/910793/detect-encoding-and-make-everything-utf-8) podría ayudar ... aunque detectar la codificación es muy complicado. – voidstate

0

pero ... ver antes de la codificación, si la cadena ya está utf8 otra cosa que de doble codificación que

function str_to_utf8 ($string) { 

    if (mb_detect_encoding($string, 'UTF-8', true) === false) { 
     $string = utf8_encode($string); 
    } 

    return $str; 
} 

o utilizar

$string = utf8_encode(utf8_decode($string)); 

para que no codifique doblemente una cadena

0

He resuelto este problema cambiando mbstring.http_input = pasan en mi archivo php.ini