2009-06-29 11 views
13

Quiero estandarizar en UTF8 en nuestro sitio web. Todas nuestras bases de datos y material de Internet están en UTF8. Todos nuestros servidores web están enviando el encabezado HTTP charset=utf-8. Sin embargo, he descubierto que al cambiar la codificación en mi Firefox (Ver -> Codificación de caracteres) a otra cosa, puedo ingresar un carácter Latin-9 en una forma y PHP simplemente los trata como UTF8 malformados.¿Puedo obligar a los navegadores web a enviar texto de formulario como UTF8?

¿Cuánto tengo que preocuparme por eso? ¿Es posible que el navegador web del usuario sobrescriba el encabezado de conjunto de caracteres UTF8 y envíe mensajes que no sean UTF8?

Actualización: Varias personas han sugerido accept-charset en los formularios individuales. Sin embargo, preferiría no tener que cambiar cada formulario web. Asumiendo que puedo controlar el encabezado de tipo de contenido HTTP, y está configurado en UTF8, ¿tengo algo de qué preocuparme?

+0

"Todas nuestras bases de datos y material de internet": todas sus cosas en Internet son propiedad nuestra. –

+0

Según la respuesta aceptada a [esta pregunta] (http://stackoverflow.com/questions/3719974/is-here-any-benefit-to-adding-accept-charset-utf-8-to-html-forms- if-the-page), 'accept-charset' resolverá el problema específico que ha descubierto: es decir, si el usuario le dice a su navegador que interprete la página como no UTF-8,' accept-charset' debe hacer que el navegador envíe formar contenido como UTF-8 a pesar de eso.Si vale la pena agregar el atributo a todas sus formas para protegerse de esa situación en particular, esa es su decisión. –

+1

asegúrate de que tu página sea realmente utf-8; en el depurador del navegador, busque el encabezado Content-Type que se envía. Además, en la consola JS, evalúa document.charset; debería devolver algo de ortografía de utf8. 'windows-1252' puede significar que el navegador no reconoce la codificación enviada. – OsamaBinLogin

Respuesta

3

Intente agregar el atributo accept-charset a los elementos del formulario.

2

Coloque un elemento accept-charset = "UTF-8" en el elemento de formulario, que hará que la publicación del formulario sea UTF-8 a pesar de la codificación del contenido de la página.

10

¿Es posible que el navegador web del usuario para anular el juego de caracteres UTF-8 cabecera y envía no UTF-8?

Por supuesto. No controlas al cliente, y el cliente puede hacer lo que quiera, incluso permitiendo que los usuarios anulen las codificaciones normales y hagan que se envíe a tu servidor basura (o lo que pasa por basura).

Dicho esto, parece que ha dado la mayoría de los pasos importantes aquí. Su documento HTML real está codificado en UTF-8 y marcado explícitamente como tal, lo que significa que los navegadores por lo general también enviarán formularios de manera predeterminada en esa codificación. (Tenga en cuenta que la especificación HTML no requiere esto. Especificar accept-charset en el formulario explícitamente es la única garantía que cumple con las especificaciones). Sospecho que esto funcionará como se espera en todos los navegadores modernos, y podría probar esto fácilmente.

En el servidor, su trabajo es siempre para validar su entrada en la medida en que sea importante para su servicio. Aunque la gran mayoría de sus usuarios será benevolente y utilizará navegadores modernos estándar, el protocolo HTTP está abierto, y tanto los extravagantes como los piratas informáticos están disponibles, y ambos pueden arrojar cualquier tipo de información que deseen. Asegúrese de no hacer suposiciones sobre las codificaciones de datos cuando se trata de seguridad o datos autenticados, y desinfecte esto antes de meterlo en las bases de datos.

4

Creo que la mejor solución es convertir a UTF-8 y manejar cualquier carácter que no sea UTF-8 cuando el usuario envíe datos. Como se indicó anteriormente, el accept-charset="UTF-8" no garantiza que los datos sean UTF-8. Y, si tiene que cambiar los formularios en todo su sitio, entonces no es una buena solución.

Por lo tanto, procesar la entrada al momento del envío puede ser una mejor manera.

Cuestiones relacionadas