我浏览了几个有关 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/