2011-09-20 48 views
5

bien, así que aquí está el problema:jQuery ajax caracteres especiales problemas

Tengo un formulario en mi página php. Cuando un usuario ingresa un nombre, una imprenta envía un evento de jQuery click (en el botón de enviar) recopila la información y la pasa a través de $ .ajax().

$.ajax({ 
    url: "ajax/addGatheringSignup.php", 
    type: "POST", 
    async: true, 
    dataType: 'json', 
    data: { 
     "id":   $_GET['id'], 
     "name":   $signupNameInput.val() 
    }, 
    success: function(jsonData){ 
     if(jsonData[0].feedback == "ok"){ 
      $signupForm = $('#singupform'); 
      $signupForm.html('Signup successful!'); 
     }else{ 
      Alert(jsonData[0].feedback); 
     } 
    }, 
    error: function(){ 
     Alert("error alert"); 
    } 
}); 

Como puede ver, el campo "nombre" es el valor del nombre inputfield. Pero cuando envío esto a mi página php (donde no formateo nada en el texto) es totalmente basura en mi base de datos MySql. En este momento estoy tratando de obtener las letras danesas æ, ø y å para trabajar.

Atm sé que mi base de datos mysql está usando UTF-8 y mi metacabezado para mi index.php se ve así (cada página se genera desde la página index.php ... ex index.php? Page = random):

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

Pero nada funciona. Cuando publico: "æÆ-øØ-åÅ" a la base de datos que guarda como: "Ã|à † -øÃ~-à ¥ ...". ¿Alguien sabe lo que tengo que hacer?

EDIT 1:

puedo ver que en una ajax éxito presentar el html me puse $ signupForm a (la línea 13 en el código anterior) muestra mal también (la cual es normalmente algunas palabras danesas donde escribe los caracteres daneses mencionados)

EDIT 2 (que se encuentra una solución):

he encontrado una manera. $ .ajax() de acuerdo con el documento jQuery, siempre analiza los datos como UTF8. No sé por qué esto estropeó mi código, pero cuando agregué * utf8_decode ($ name) * a la función de agregar que analizó correctamente (así que supongo que mi juego de caracteres debe haberse configurado de alguna manera como ISO-8859-1 oculto?) Esto simplemente lo hizo más fácil ya que pude volver a activar mi antiguo juego de caracteres ISO-8859-1 y eliminar todas mis funciones utf8_encode().

Mi último problema fue el presentado en "EDIT 1". Aquí he encontrado una solución sobre cómo convertir cadenas UTF8 (de nuevo debido a .ajax $()):

function decode_utf8(s){ 
    return decodeURIComponent(escape(s)); 
} 

Respuesta

2

El problema podría estar en su conexión a la base de datos. Se está comunicando en un conjunto de caracteres dado también.

Ver mysql_set_charset().

+0

Sí im todavía trabajando en ella y acaba de descubrir que si añado "æÆøØåÅ" a la sentencia-sql que todavía muestra mal, así que sí que es la base de datos. Pero, ¿qué juego de caracteres tengo que configurar cuando utilizo UTF-8 en mi metacabezado? ¿Solo "UTF-8"? –

+0

Creo que sí, sí. Normalmente uso UTF8-Unicode para la intercalación. – Rijk

+0

justed chekc mi DB a través de phpMyAdmin: conjunto de caracteres de MySQL: UTF-8 Unicode (UTF-8) así que no es: S –

0

No estoy seguro pero parece que tienes tipos de codificación mixta.

Una página que se envía como UTF-8, pero donde la entrada se transforma a ISO-8859-1 y se almacena en una tabla de codificación mysql UTF-8 fallará.

Debe mantener el control en el tipo de entrada de ecodings en relación con el tipo de codificación que ha elegido usar como interno en php y externo.

Trata de ver si esto te ayuda.

  1. PHP messing with HTML Charset Encoding
  2. http://www.tanzilo.com/2008/12/29/php-mysql-creating-a-website-in-your-local-language-smoothly/
2

Los datos en el Ajax-post es UTF8-codificado, por lo que en su script PHP (en la que se escribe en la base de datos), que tiene que hacer lo siguiente:

$name = utf8_decode($_POST['name']); 

esa manera se puede almacenar como æÆ-øØ-åÅæÆ-øØ-åÅ en lugar del ASCII con formato incorrecto æÆ-øØ-åÅ también su base de datos tiene que estar en la intercalación adecuada (por ejemplo latin1_swedish_ci)

-1
function decode_utf8(s){ 
    return decodeURIComponent(escape(s)); 
} 

es increíble una buena forma corta es

Name = decodeURIComponent(escape(Name)); 

se va a resolver un problema 'caracteres ISO 8859-1' en respuesta ajax