使用Jquery.serialize()处理日语;

时间:2010-08-20 11:45:57

标签: jquery unicode encoding serialization encodeuricomponent

小男孩。我想是一个奇怪的人!

从表单获取输入,我想确保在将它发送到php脚本以创建一些xml之前没有西方字符,标点符号或数字...

来自表格名称=“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,'');

--->文本使用.ajax

转到php脚本

但是,日语在进入正则表达式之前正在转换为ASCII!

例如。あああ成为%E3%81%82%E3%81%82%E3%81%82

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

我会交换它并在序列化之前更改输入,如下所示:

$('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....
});

这使用.val()在序列化之前根据正则表达式获取和替换旧值(更重要的是,在那里调用encodeURIComponent())。


另一个替代方法是在.serialize()步骤中自己执行正则表达式,如下所示:

$('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()实际上只是$.param($(this).serializeArray())所以我们所做的就是将其拆分到此处,获取value数组{name:'name',value:'value'}对象对{{1}} 3}}在每个上创建并运行正则表达式。之后,我们将更改后的数组(西方字符)传递给.serializeArray(),以序列化为字符串。