php - jQuery AJAX 在发送到服务器的过程中修改字符编码

标签 php javascript jquery character-encoding

我浏览了几个有关 AJAX 和字符编码的问题,但我似乎只能找到有关响应编码的问题,但找不到数据发送到服务器编码的位置。

我正在将使用 jQuery 序列化的表单发送到服务器。然后 PHP 将此表单的字段保存到数据库中。数据库使用 latin1-swedish-ci。带有表单的页面使用 iso-8859-1。

当我使用 AJAX 将数据发送到服务器时,像 这样的字符在发送到服务器的过程中会被转换为 ,并得到如此保存在数据库中。当我跳过 AJAX 并使用普通的 html 表单提交时,字符在数据库中显示得很好。

很明显,表单数据的 jQuery 序列化和 AJAX 提交是导致字符损坏的原因,但我该如何解决这个问题呢?我尝试更改 AJAX 调用的 contentType。我尝试使用 iconv() 来转换服务器端的字符,这会导致错误或不正确的翻译。我尝试使用 utf8_decode() 服务器端,但这会将其转换为问号。我无法将输出页面更改为 UTF-8 编码,因为这会导致这些页面上的其他内容出现其他问题。理想情况下,该解决方案首先会防止字符被错误地保存在数据库中,就像正常的 html 表单提交一样。关于如何解决这个问题有什么想法吗?

将表单发送到服务器的 JavaScript:

BlogEditForm.prototype.save = function() {
    var self = this;
    $.ajax( {
        type: 'POST',
        url: 'blog_edit_ajax.php',
        dataType: 'json',
        data: self.dialog.find( 'form' ).serialize(),
        success: function( response ) {
            self.processSaveResponse.call( self, response );
        }
    } );
};

最佳答案

您是否尝试过将序列化位解析为 PHP 中的字符串,然后再将其保存到数据库?

parse_str($_POST['field_name'], $php_variable_name);

并在插入查询中使用$php_variable_name

希望这有帮助:-)

关于php - jQuery AJAX 在发送到服务器的过程中修改字符编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12042832/

相关文章:

javascript - `multiple` 中包含 `bootstrap-select` 的表单提交的值

php - Codeigniter 返回代码 0 db 错误而没有消息

php - 合并 2 个 while 循环结果

jQuery 选择器首先匹配一组元素

javascript - 某些功能在日期选择器中不起作用

php - 多张图片上传问题

javascript - 取消选中复选框期间调用函数 - 脚本 CS6 64 位 Photoshop - Bug

javascript - 颜色阴影响应 div 的数量

javascript - 'exit' 是 JavaScript 中普遍支持的停止执行的方法吗?

javascript - 为什么复制 html 后我的 select 的值会自行重置?