【发布时间】:2012-12-21 08:33:54
【问题描述】:
我有一个 php 文件,它使用 jQuery.ajax() 从另一个 php 文件中抓取一些数据到一个 div 中。
jQuery.ajax({
type: 'POST',
encoding:"UTF-8",
dataType:"html",
contentType: "text/plain; charset=UTF-8",
url: '/path/data.php',
success: function(msg) {
jQuery('#dataBox').html(msg);
}
});
我的问题是,如果我通过 ajax 获取的数据中有一些“特殊”字符,例如 åäö,那么我会得到“黑色菱形中的问号”标记。如果我在浏览器中打开外部文件,它就可以工作。如果我在主页上放一些特殊字符,它就可以了。
一些简化的代码:
数据.php:
$mysqli = new mysqli("localhost", "username", "pass", "db");
$mysqli->set_charset("utf8");
$mysqli->query("SET GLOBAL time_zone = '+00:00'");
$stmt = $mysqli -> prepare("SELECT GROUP_CONCAT(sometext) AS mytext FROM `mytable`");
$stmt -> execute();
$results = selectResults($stmt);
$stmt -> close();
$mysqli -> close();
selectResults 函数:
function selectResults($stmt)
{
$parameters = array();
$results = array();
$meta = $stmt->result_metadata();
while ( $field = $meta->fetch_field() ) {
$parameters[] = &$row[$field->name];
}
call_user_func_array(array($stmt, 'bind_result'), $parameters);
while ( $stmt->fetch() ) {
$x = array();
foreach( $row as $key => $val ) {
$x[$key] = $val;
}
$results[] = $x;
}
return $results;
}
数据.php:
foreach($results as $result){
$textArray = explode(',', $result['mytext']);
}
foreach($textArray as $text){
echo($text);
}
【问题讨论】:
-
您的 PHP 脚本是否保存为 UTF8 文件?
-
您可能需要对 ajax 调用返回的内容进行 utf8_encode。我已经能够自己用 å,ä,ö 解决同样的问题。
-
检查您的 PHP 编码。你确定是UTF-8吗?您所描述的是编码不匹配的典型症状。
-
@roasted 是的,PHP 脚本保存为 UTF-8 文件。
-
你不需要
utf8_encode,这是一个临时解决方案,迟早会导致错误,因为它会很高兴地“双重编码”已经在 utf-8 中的字符串。 PHP 完全可以使用 UTF-8 编码的字符串。utf8_encode仅在基础数据采用 ISO-8859-1 时才有帮助,在这种情况下,您应该简单地更改基础数据的编码方式,而不是使用utf8_encode
标签: jquery html ajax utf-8 character