jQuery:UTF-8无法使用ajax请求

我有一个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,例如åäö,然后我会得到“黑色钻石中的问号”标记。 如果我在浏览器中打开外部文件就可以了。 如果我在主页上放了一些特殊字符,它就可以了。

一些简化的代码:

data.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; } 

data.php:

 foreach($results as $result){ $textArray = explode(',', $result['mytext']); } foreach($textArray as $text){ echo($text); } 

很抱歉,如果你得到unicode替换字符 ,那么输入已被解释为UTF-8但输入的原始字节与UTF-8不匹配,IE不是UTF-8。

如果您在直接访问页面时看到正确的字符,那么它必须是那些强制UTF-8解释实际上在其他编码中的数据的ajax参数,默认情况下是浏览器的Windows-1252。

发布php代码和/或数据的原始字节。

我会写这个作为答案,因为它可以更容易地帮助别人。

要解决这个问题,您必须确保输出的内容与ajax预期的相同,对于utf-8,内容需要为utf-8或编码为utf-8使用

 utf8_encode($content); 

如果你可以从数据库中提供utf-8内容,因为Esailija说你不需要使用encode-function。

通过在data.php文件中的echo()数据周围设置utf8_encode()来修复它。 没想到尝试这个,因为它在浏览器中打开data.php时运行正常。

编辑:

utf8_encode()移动到selectResults函数,以便它编码我从数据库中获取的所有值。