0


我遇到了字符集问题,我正在疯狂地寻找解决方案。这就是我所拥有的:

  • 我有一个 MySQL 数据库,其中 'latin1_spanish_ci' 作为数据库、表和每个字段的排序规则。
  • 标题为 '<meta http-equiv="Content-type" content="text/html; charset=iso-8859-1">' 的 html 文件有一个表单。当按下按钮时,将调用一个 Ajax,它将一个 POST 请求发送到 PHP。
  • 调用 'header('Content-type: text/html; charset=iso-8859-1');' 的 PHP 在顶部。这个 PHP 对数据库进行查询以获取数据列表。
  • AJAX 调用如下:

    $.ajax({ url:"llistat.php", type: "POST", data: { 扇区: $("#sector").val(), cp : $("#cp").val(),省:$("#province").val(),免费:$("#free").val()},成功:函数(数据){ $("#results").html(""); $("#results").append(data); }, contentType: "application/x-www-form-urlencoded; charset=iso-8859-1" });

问题...

  1. 如果我在 PHP 中保留字符集标头,则字符会从数据库中正确获取,但通过 AJAX 调用发送的“异端”字符(重音符号、“ñ”、...)无法正确获取。
  2. 如果我删除字符集标题,我会遇到同样的问题,但反过来。调用中的字符被正确获取,但不是来自数据库的字符。
  3. 最后,如果我不通过 Ajax 调用进行调用,而是直接提交表单,则一切正常。字符已正确发送,数据库中的信息也已正确发送。

所有这些过程有什么问题?我猜(根据最后一点)通过 AJAX 调用或通过表单中的提交进行调用是有区别的。但是,这有什么区别?我究竟做错了什么?

谢谢。

4

1 回答 1

1

$.ajax始终使用encodeURIComponentUTF-8 的用途。您的流程有什么问题不是到处都使用 UTF-8。

如果你现在不能改变这个事实,你可以mb_convert_encoding在服务器端将 ajax 数据从 UTF-8 转换为 Windows-1252。

注意:

  • 对于浏览器 ISO-8859-1 意味着 Windows-1252
  • 对于 MySQL latin1 意味着 Windows-1252
  • 对于任何 PHP 函数 ISO-8859-1 意味着 ISO-8859-1
  • 对于除 MySQL 之外的任何东西,Windows-1252 意味着 Windows-1252
于 2013-03-29T12:11:38.037 回答