我正在构建一个使用JQuery.Validator和XRegexp的表单,在将输入字段提交到服务器之前清理输入字段(这也会验证所有传入的帖子)但是我在发布内容时遇到了一些麻烦服务器。
如果我发布这样的UTF-8字符串:Русский日本语fdsffsfsa 我的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的地方?
答案 0 :(得分:0)
好的,我发现了问题,不好意思说我被误导了,但是关于JQuery UTF-8内容在另一篇文章中被编码为UTF-16的评论,但这不是问题。
原来UTF-8字符只是原始网址编码。我需要做的就是在我的PHP端解码它们首先通过 rawurldecode()运行它们然后将它传递给我的过滤器进行进一步测试。