jQuery的:UTF-8没有与Ajax请求工作(jQuery: UTF-8 not working

2019-08-05 22:17发布

我有一个使用一个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);
}

Answer 1:

很抱歉,但如果你Unicode替换字符,然后输入已经在UTF-8解释,但输入的原始字节不匹配UTF-8,IE这不是UTF-8。

如果你看到正确的字符直接访问该页面时,那么它必须是迫使上,实际上是在一些其他的编码数据UTF-8解释这些AJAX参数,默认为Windows-1252的浏览器。

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



Answer 2:

我会写这样一个答案,因为它可能会帮助别人更容易。

为了解决你必须看到它,你的输出内容是一样的AJAX希望它是如此的UTF-8含量的问题需要是UTF-8编码或为UTF-8使用

utf8_encode($content);

如果你可以从数据库中提供UTF-8含量Esailija说你不会需要使用编码功能。



Answer 3:

通过设置固定它utf8_encode()周围,我的数据echo()在data.php文件。 没想到这一尝试,因为它在浏览器中打开data.php时工作得很好。

编辑:

移动的utf8_encode()到selectResults功能代替它编码,我从数据库中获取所有值。



文章来源: jQuery: UTF-8 not working with ajax request