编码在 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"
而且我已经单独和一起尝试过这些解决方案:
- AddDefaultCharset UTF-8 - 在 .htaccess 上
- ini_set('charset', 'UTF-8'); - 关于 php 文件
- header('Content-Type: text/html; charset=utf-8'); - 关于 php 文件
- htmlentities($_POST['titulo']); - 关于 php 文件
- 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。
为了简化正在发生的事情,我试图将字符串 "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"
而且我已经单独和一起尝试过这些解决方案:
- AddDefaultCharset UTF-8 - 在 .htaccess 上
- ini_set('charset', 'UTF-8'); - 关于 php 文件
- header('Content-Type: text/html; charset=utf-8'); - 关于 php 文件
- htmlentities($_POST['titulo']); - 关于 php 文件
- 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。