type headers contenttype content charset application jquery character-encoding

contenttype - jquery ajax headers



jQuery: Ajax umlauts y personajes especiales son un desastre (4)

Intenté ajustar los datos afectados en encodeURIComponent ()

Nah, si pasas un objeto {} , jQuery se encargará de UTF-8 y la codificación URL por ti.

Cuando uso ese AJAX con htmlentities () en mi php, mis diéresis se ven así en texto sin formato: UE à , AE à , OE à , ue ü, ae ä, oe o

Si debe usar htmlentities() , tiene que decirle que su codificación es UTF-8 en el argumento $charset opcional, de lo contrario (de manera predeterminada) tratará todos sus bytes como ISO-8859-1, y los codificará a inapropiados referencias de entidad, una para cada byte.

Mejor es usar htmlspecialchars() lugar, ya que no intenta aplicar una codificación innecesaria a caracteres que no sean los pocos caracteres ASCII que realmente lo necesitan.

Y así en la base de datos: UE Ãœ, AE à ", OE Ã-, Ãue, ae ä, oe o

¿Cómo estás determinando eso? ¿Conoce la herramienta que está utilizando para tomar datos de la base de datos acerca de Unicode? (Si se trata de una interfaz de administrador web dudosa de PHP, tal vez no. PHP no es excelente en Unicode).

Es posible que esté almacenando bytes UTF-8 adecuados en la base de datos, pero en tablas marcadas como una intercalación Latin-1. Esto funcionará, ya que obtendrá los mismos bytes que ingresó, pero si MySQL no sabe que son bytes UTF-8, las comparaciones de cadenas que no distinguen entre mayúsculas y minúsculas fuera del rango ASCII no funcionarán correctamente. , por lo que buscar Ä no coincidirá con ä . Eso puede o no importarle a usted.

Si no uso htmlentities () sino mysql_real_escape_string () en su lugar

Whoah, cuidado. HTML-escaping es para la etapa de salida de la página. SQL-string-literal-escape ocurre cuando se crea una consulta SQL. Los necesita a ambos, pero no los mezcle ni intente hacerlos en el mismo escenario, o tendrá todo tipo de escapes extraños, errores y posibles vulnerabilidades.

Acabo de crear mi primera función ajax con jQuery que realmente funciona, pero desafortunadamente la codificación de caracteres (para caracteres como ä, ö, ß, è, ć, å, ø) es una pesadilla.

Mis archivos y mi base de datos son todos UTF-8. He intentado una multitud de opciones en la función ajax y la función PHP, ninguna de las cuales fue satisfactoria.

Este es mi Ajax

var dataString = { ''name'': name, ''mail'': mail // other stuff } $.ajax({ type: "POST", url: "/post.php", data: dataString, contentType: "application/x-www-form-urlencoded;charset=UTF-8", cache: false, success: function(html){ // do stuff }

Lo he intentado sin contentType: "application / x-www-form-urlencoded; charset = UTF-8" y he tratado de ajustar los datos afectados en encodeURIComponent (), ninguno de los cuales funcionó.

Cuando uso ese AJAX con htmlentities () en mi php, mis diéresis se ven así en texto sin formato: UE à , AE à , OE à , ue ü, ae ä, oe o

Y así en la base de datos: UE Ãœ, AE à ", OE Ã-, Ãue, ae ä, oe o

Si no utilizo htmlentities () sino mysql_real_escape_string () en su lugar (o ninguno), se ven bien en texto plano, pero se ven así en la base de datos: AE à ", OE Ã-, UE Ãœ, ae ä oe à ue üue

He estado probando toneladas de opciones durante horas, pero no puedo encontrar una solución que funcione. Hasta ahora, la única opción que parece tener es que parezcan un desastre total en la base de datos, pero sería muy contraproducente si esos conjuntos de datos necesitan ser editados.


Parece que el problema está ocurriendo al insertar los datos en la base de datos. ¿Estás usando MySQL? Después de conectarse a su servidor de base de datos emita la consulta:

SET NAMES utf8;

Esto le indicará al servidor de la base de datos que la conexión del cliente desea enviar datos en UTF-8 e interpretarlos como tales.

Además, cuando envíe estos datos al navegador, asegúrese de configurar el encabezado ContentType

header(''Content-type: text/html; charset=utf-8'');

Esto le indicará al navegador que interprete los datos como UTF-8.


Finalmente encontré una solución que funciona para mí; contentType: "application/x-www-form-urlencoded;charset=UTF-8" el contentType: "application/x-www-form-urlencoded;charset=UTF-8" de mi jQuery ajax, solo uso htmlentities($value, ENT_NOQUOTES, ''UTF-8''); para procesar los datos con SQL y mi base de datos está configurada en utf8 unicode.

Los caracteres se muestran correctamente y se almacenan como ä para ä y así sucesivamente en la base de datos.


Intente utilizar esta función en lugar de htmlentities

htmlspecialchars()