编码在 PHP 到 Ajax 与 jQuery 之间中断

Encode broke on PHP through Ajax with jQuery

为了简化正在发生的事情,我试图将字符串 "Técnico" 发送到 PHP,它在 $_POST var.[=19= 上被视为 "Técnico" ]

错误仅出在这个项目上。我在 Apache2 上还有另外 3 个项目 运行(同一个 /var/www 文件夹),它们没有出现这个问题。

现在,数据的完整运行方式。

jQuery:

$.ajax({
    url: "config/inserirCargo.php",
    type: 'POST',
    data: {
        titulo: $("#titulo").val()
    },
    success: function(data) {
        $("#cargo").html(data); 
    },
    contentType: 'application/x-www-form-urlencoded; charset=UTF-8' // Tried with and without
});

jQuery 响应:

PHP:

var_dump($_POST['titulo']);
die();

我的 HTML 已有元标记。

meta http-equiv="Content-Type" content="text/html; charset=utf-8"

而且我已经单独和一起尝试过这些解决方案:

  1. AddDefaultCharset UTF-8 - 在 .htaccess 上
  2. ini_set('charset', 'UTF-8'); - 关于 php 文件
  3. header('Content-Type: text/html; charset=utf-8'); - 关于 php 文件
  4. htmlentities($_POST['titulo']); - 关于 php 文件
  5. titulo: encodeURIComponent($("#titulo").val()) - 在 js 文件上

并且每次对 .htacces 进行一些更改或使用 ini_set.

时,我都会执行 "service apache2 restart"

我的PHP版本是5.5.3,更准确地说:

PHP 5.5.3-1ubuntu2.6 (cli) (built: Jul 7 2014 16:54:32) Copyright (c) 1997-2013 The PHP Group Zend Engine v2.5.0, Copyright (c) 1998-2013 Zend Technologies with Zend OPcache v7.0.3-dev, Copyright (c) 1999-2013, by Zend Technologies

有人可以帮助我吗?

请检查php和其他源文件编码。 请检查 table 整理。

我发现如果你使用下面的:

utf8_decode("Técnico");

它会 return Técnico。

在服务器端,当您收集 titulo 时,您只需 utf8_decode 即可。 如果您需要转换所有 POST 变量,只需将 $_POST 数组传递给此函数即可。

function utf8_decode_recursive(&$data) {
    foreach ($data as &$row) {
        $row = utf8_decode($row);
    }
}

所以基本上我猜你无法在 UTF-8 中获得正常的 Técnico。

对不起各位。

问题是我的 Codeigniter 和数据库的字符集。

它被设置为 utf-8,但是,数据库是 latin 1。