Обработка японского с помощью Jquery.serialize (); - PullRequest
2 голосов
/ 20 августа 2010

Ху мальчик. Я думаю, странный!

Получая входные данные из формы, я хочу убедиться, что нет западных символов, знаков препинания или цифр, прежде чем отправлять их в скрипт php для создания некоторого xml ...

из формы 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,'');

---> текст идет в php скрипт с использованием .ajax

Однако, японцы конвертируются в ASCII, прежде чем они попадут в регулярное выражение!

например.あ あ あ становится% E3% 81% 82% E3% 81% 82% E3% 81% 82

Есть предложения?

1 Ответ

1 голос
/ 20 августа 2010

Я бы поменял его и изменил входы перед сериализацией, например:

$('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() для сериализации в виде строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...