JQuery, Ajax, Validation или xRegexp изменяют содержимое UTF-8 на UTF-16

0

Я создаю форму, которая использует JQuery.Validator с XRegexp для очистки полей ввода до их отправки на сервер (который также проверяет все входящие сообщения), но у меня возникла небольшая проблема с отправкой содержимого на сервер.

Если я размещаю строку UTF-8 следующим образом: Русский 日本語 fdsffsfsa my 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% АА% 9Efdsffsfsa

Я знаю из ответа немецкого Rumm на этом посту. Почему JQuery POSTing в 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?

Теги:
validation
utf-8
encoding
utf-16

1 ответ

0
Лучший ответ

Хорошо, я решил проблему, немного смутившись сказать, что меня сбило с толку, но комментарии относительно содержимого JQuery UTF-8 были закодированы в UTF-16 в другом сообщении, но это не проблема.

Оказывается, символы UTF-8 просто закодированы в url. Все, что мне нужно сделать, чтобы декодировать их на моей стороне PHP, запускает их через rawurldecode(), а затем передает его фильтрам для дальнейшего тестирования.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню