Ajax,请求标头 UTF-8 到 ISO 字符集 [重复]

Posted

技术标签:

【中文标题】Ajax,请求标头 UTF-8 到 ISO 字符集 [重复]【英文标题】:Ajax, Request Header UTF-8 to ISO Charset [duplicate] 【发布时间】:2015-11-22 05:04:01 【问题描述】:

我有一个编码为 iso-8959-9 的页面。我将 ajax 请求发送到同一页面,同时将一些数据保存到数据库。但它会将字符转换为 utf-8。 我的响应标头与 charset iso-8859-9 看起来不错。但是 Request Header、Content-Type 数据总是 UTF-8。请参考下面的截图。 这是我为解决此问题所做的工作: 1- 我设置了 php 标头 iso-8859-9 2- 我将 apache 的默认字符集更改为 iso。 3- 我将 ajax 选项 beforeSend、setRequestHeader 和 contentType 设置为 iso。 4- 我修改了 jquery.js 并将 ajax 默认编码设置为 iso。 他们都没有解决我的问题。我不想做任何 php 字符集编码 btw。 还有其他想法吗? 谢谢

我的 ajax 代码: `

                $.ajax(

                    url: window.location.href,
                    type: 'POST',
                    data: $(this).serialize(),
                    contentType: "application/x-www-form-urlencoded; charset=iso-8859-9",


                    success: function(result) 

                        $('#IcerikContent').html($(result).find("#Icerik"));
                        $('html, body').animate(scrollTop: 0, 500);
                        Metronic.initAjax();
                        if (typeof initialize == 'function')  initialize(); 
                        stopPageLoading();
                    
                );
        `

【问题讨论】:

【参考方案1】:

恐怕 AJAX POST 请求必须使用 UTF-8。 jQuery manual explains it:

根据 W3C XMLHTTPRequest 标准,POST 数据将始终使用 UTF-8 字符集传输到服务器。

您现在可能想知道contentType 设置:

注意:W3C XMLHttpRequest 规范规定字符集始终为 UTF-8;指定另一个字符集不会强制浏览器更改编码。

换句话说,你别无选择。您要么需要将服务器端代码迁移到 UTF-8,进行显式转换——iconv()mb_convert_encoding() 会派上用场——要么想出一个巧妙的 javascript 技巧(例如在提交之前序列化数据)。

【讨论】:

嗯。你说的对。谢谢你的回答!我必须使用一些服务器端编码来解决这个问题。

以上是关于Ajax,请求标头 UTF-8 到 ISO 字符集 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

jQuery 将 ISO 字符集设置为 ajax 请求

为啥 POST 不支持字符集,但 AJAX 请求可以?雄猫 6

具有自定义标头和请求正文作为 JSON 字符串的跨域 jquery ajax 请求

为 iso-8859-2 发送正确的字符集标头

在 jQuery AJAX GET 调用中传递请求标头

请求与响应的时候乱码问题原理