【问题标题】:Encode broke on PHP through Ajax with jQuery使用 jQuery 通过 Ajax 在 PHP 上进行编码
【发布时间】:2015-03-04 06:17:30
【问题描述】:

为了简化正在发生的事情,我尝试将字符串“Técnico”发送到 PHP,它在 $_POST var 上被视为“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 标签。

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. 标题:encodeURIComponent($("#titulo").val()) - 在 js 文件中

每次对 .htacces 进行一些更改或使用 ini_set 时,我都会执行“service apache2 restart”。

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

PHP 5.5.3-1ubuntu2.6 (cli)(构建时间:2014 年 7 月 7 日 16:54:32)版权所有 (c) 1997-2013 PHP Group Zend Engine v2.5.0,版权所有 (c) 1998-2013 Zend 科技 Zend OPcache v7.0.3-dev,版权所有 (c) 1999-2013,由 Zend Technologies 提供

有人可以帮我吗?

【问题讨论】:

  • 我猜它在这一行被编码为 ISO-8859-1 - titulo: $("#titulo").val()
  • 但是,我该如何撤消呢?使用 mb_detect_encoding($_POST['titulo']);,它返回 'UTF-8'。使用 mb_convert_encoding($_POST['titulo'], 'UTF-8');结果与以前相同:/

标签: php jquery ajax utf-8


【解决方案1】:

请检查 php 和其他源文件的编码。 请检查表排序规则。

【讨论】:

  • 当使用 ini_get('charset') 时,我得到了 'UTF-8' 作为答案。使用 mb_detect_encoding($_POST['titulo']); 时相同。现在没有涉及到的表,但它已经配置好了。谢谢提醒:)
【解决方案2】:

我发现如果你使用以下:

utf8_decode("Técnico");

它将返回 Técnico。

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

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

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

【讨论】:

  • 感谢您的回答:D。但我得到了“T�cnico”作为回应:/
  • 哎呀......这肯定取决于我猜的服务器......让我试试别的。随时通知您。
  • 是的。完全在服务器上,甚至不是 Apache2 的错。我还有另外 3 个项目在同一个 /var/www 文件夹上运行,但都没有出现同样的问题。
【解决方案3】:

对不起各位。

问题在于我的 Codeignter 和数据库的字符集。

设置为 utf-8,但是数据库是 latin1。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-07
    • 2013-01-05
    • 1970-01-01
    • 2013-10-23
    • 2012-10-29
    • 2012-11-15
    • 2019-02-19
    相关资源
    最近更新 更多