2010-08-20 5 views
2

Hoo garçon. Un étrange je suppose!Gestion du japonais avec Jquery.serialize();

obtenir les commentaires d'une forme, je veux vous assurer qu'il n'y a pas de caractères occidentaux, la ponctuation ou les numéros avant de l'envoyer à un script php pour créer une xml ...

de la forme name = « a »

$('form').submit(function() { 

text = ($(this).serialize()); 

text = text.substr(2,text.length) 

text = text.replace(/[^\u3040-\u30FF^\uFF00-\uFFEF^\u4E00-\u9FAF^\u3400-\u4DBF]/g,''); 

---> texte va script php en utilisant .ajax

Cependant, les japonais est convertie en ASCII avant qu'il arrive à la regex!

par ex.あ あ あ devient% E3% 81% 82% E3% 81% 82% E3% 81% 82

Des suggestions?

Répondre

1

j'échanger autour et changer les entrées avant sérialisation, comme ceci:

$('form').submit(function() { 
    $(this).find(':text, textarea').val(function(i, v) { 
    return v.replace(/[^\u3040-\u30FF^\uFF00-\uFFEF^\u4E00-\u9FAF^\u3400-\u4DBF]/g,''); 
    }); 
    var text = ($(this).serialize()); 
    //submit form.... 
}); 

Il utilise .val() pour obtenir et remplacer l'ancienne valeur basée sur l'expression régulière avant la sérialisation (et plus important encore, encodeURIComponent() obtient appelé là-bas).


Une autre alternative est de faire la regex-vous au milieu des .serialize() étapes, comme ceci:

$('form').submit(function() { 
    var arr = $(this).serialzeArray(); 
    $.each(arr, function() { 
    this.value = this.value.replace(/[^\u3040-\u30FF^\uFF00-\uFFEF^\u4E00-\u9FAF^\u3400-\u4DBF]/g,''); 
    }); 
    var postData = $.param(arr); 
}); 

.serialize() est vraiment juste $.param($(this).serializeArray()) tout ce que nous faisons est scindant ici, en prenant le value des paires d'objets {name:'name',value:'value'} dans le tableau que .serializeArray() crée et exécute l'expression régulière sur chacun. Après cela, nous passons le tableau modifié, caractère-occidental moins à $.param() pour être sérialisé en tant que chaîne.

Questions connexes