AJAX将西里尔字母转换为某种编码

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问题,但我在互联网上没有找到答案。 感谢您的关注。

2个回答

4
Javascript的escape()对非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

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);
            }
        }
});

更加清晰和简单。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接