Я бы поменял его и изменил входы перед сериализацией, например:
$('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'}
пар объектов в массиве, .serializeArray()
создает и запускает регулярные выражения для каждого. После этого мы передаем измененный массив, не содержащий символов западных символов, в $.param()
для сериализации в виде строки.