3

我有个问题。提交表单后,我使用 AJAX 发送请求。在我尝试西里尔文字之前,一切都很完美。

我输入的内容:питання

什么提醒我 javascript:питання

什么呼应了我 $_POST['question']:%u041F%u0438%u0442%u0430%u043D%u043D%u044F

这是我的 AJAX 请求:

$.ajax({
        type: "POST",
        url: "addQuestion.php",
        data: "u_id=" + $("#u_id").val() + "&u_a_name=" + $("#u_a_name").val() + "&question="+escape($("#question_input").val()),
        success: function(data) {
                if (data == "Asked") {
                alert("Asked");
                window.location.reload();
            } else {
                alert(data);
            }
        }
    });

所以我认为这是 AJAX 问题,但我还没有在互联网上找到答案。感谢您的关注。

4

2 回答 2

4

Javascriptescape()不能很好地处理非 ASCII 字符,并且无法处理我通常使用的任何 unicode 字符encodeURIComponent()。在 PHP 中,您可以使用urldecode()反转相同的编码。所以:

Javascript:encodeURIComponent("питання")返回%D0%BF%D0%B8%D1%82%D0%B0%D0%BD%D0%BD%D1%8F

PHP:urldecode("%D0%BF%D0%B8%D1%82%D0%B0%D0%BD%D0%BD%D1%8F");返回питання

https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/encodeURIComponent

http://php.net/manual/en/function.urldecode.php

于 2013-01-11T02:13:08.630 回答
1

escape使用非标准 URL 编码,根本不应该使用。

无论如何,使用 jQuery,您不会将数据作为字符串而是作为对象,让 jQuery 对其进行格式化和编码:

$.ajax({
        type: "POST",
        url: "addQuestion.php",
        data: {
            u_id: $("#u_id").val(),
            u_a_name: $("#u_a_name").val(),
            question: $("#question_input").val()

        },

        success: function(data) {
                if (data == "Asked") {
                alert("Asked");
                window.location.reload();
            } else {
                alert(data);
            }
        }
});

更清洁,更容易。

于 2013-01-11T10:31:33.483 回答