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

时间:2013-01-11 02:01:08

标签: php ajax encoding

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

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

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

回复我的事情是__POST ['问题']:%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 个答案:

答案 0 :(得分:2)

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 :(得分:1)

escape使用非标准网址编码,根本不应使用。

无论如何,使用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);
            }
        }
});

更清洁,更容易。