0

サーバーに送信される前に 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 への再エンコードがどこで行われているのか分かりますか?

4

1 に答える 1

0

OK、私は問題を理解しました。道に迷ったと言うのは少し恥ずかしいですが、別の投稿で JQuery UTF-8 コンテンツが UTF-16 にエンコードされていることについてコメントしていますが、それは問題ではありませんでした。

UTF-8 文字は単純に生の URL エンコードされていることがわかります。PHP 側でそれらをデコードするために必要なことは、最初にrawurldecode()を介してそれらを実行し、それをさらにテストするためにフィルターに渡すことだけです。

于 2013-11-10T06:10:39.027 に答える