サーバーに送信される前に XRegexp で JQuery.Validator を使用して入力フィールドを消去するフォームを作成しています (これにより、すべての受信投稿も検証されます) が、コンテンツをサーバーに戻すのに少し問題があります。
このような UTF-8 文字列を投稿すると: Русский日本語fdsffsfsa
以下のフォームに:
<form id="xyzzyForm">
<input id="xyzzy" name="xyzzy" type="text" />
<button type="submit">Submit</button>
</form>
私の JQuery/Validate/XRegExp POST の文字列は UTF-16 です: xyzzy=%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9%E6%97%A5 %E6%9C%AC%E8%AA%9Efdsffsfsa
私は、この投稿に対するドイツ語の Rumm の回答から知っています。Why is jQuery POSTing in UTF-16? 問題は escape() から発生していましたが、以下のスクリプトからわかるように、私はそれを使用していません:
<script>
$.validator.addMethod(
"regex",
function(value, element, regexp) {
var re = new XRegExp(regexp);
return this.optional(element) || re.test(value);
},
"Please check your input."
);
$(document).ready(function() {
$("#xyzzyForm").validate({
rules: {
xyzzy: {
required: true,
minlength: 8,
maxlength: 32,
regex: '^[\\p{L}\\p{M}*+\\p{N}]*$'
}
},
messages: {
xyzzy: {
required: "Please enter your xyzzy.",
maxlength: "The xyzzy field only accepts between 8-32 characters.",
minlength: "The xyzzy field only accepts between 8-32 characters.",
regex: "The xyzzy field contains invalid characters. This field only accepts letters and/or numbers."
}
},
submitHandler: function(form) {
var request;
if (request) request.abort();
var $inputs = $(form).find("input, select, textarea, button");
var serializedData = $(form).serialize();
$inputs.prop("disabled", true);
request = $.ajax({
url: "./xyzzy-ajax.php",
cache: false,
type: "post",
contentType: "application/x-www-form-urlencoded; charset=utf-8",
data: serializedData
});
// Prevent default posting of form.
return false;
}
});
});
</script>
この場合、UTF-16 への再エンコードがどこで行われているのか分かりますか?