utf8\U unicode\U ci-Ajax调用的JSON数据PHP头中的内容类型字符集

utf8\U unicode\U ci-Ajax调用的JSON数据PHP头中的内容类型字符集,php,mysql,angularjs,json,ajax,Php,Mysql,Angularjs,Json,Ajax,我对MYSQL表中的一列使用了utf8\uUnicode\uCI来存储泰米尔语字符 我正在实现一个AngularJS项目,因为我正在调用PHP服务,返回类型是JSON数据。我无法得到实际的角色,相反,我得到的是????? 我的PHP示例源代码: <?php header("Access-Control-Allow-Origin: *"); header("Content-Type: application/json; charset=UTF-8"); $outp = ""; $sql

我对MYSQL表中的一列使用了utf8\uUnicode\uCI来存储泰米尔语字符

我正在实现一个AngularJS项目,因为我正在调用PHP服务,返回类型是JSON数据。我无法得到实际的角色,相反,我得到的是?????

我的PHP示例源代码:

<?php

header("Access-Control-Allow-Origin: *");
header("Content-Type: application/json; charset=UTF-8");

$outp = "";

$sql_select = "";
$sql_select .= "SELECT * FROM poll_quest WHERE qid = $nqid LIMIT 1 ";
$bQuery = mysql_query($sql_select, $link);
while ($bRow = mysql_fetch_array($bQuery)) {

    $qflag = true;

    $outp .= '{ "ID": ' . $bRow['qid'] . ',';
    $outp .= '"Ans":"' . $bRow['ans_tam'] . '" }';
}

$outp ='{"records":['.$outp.']}';
echo($outp);

?>

请帮助我,如何获取响应JSON中的实际字符…

首先,MySQL驱动程序,即MySQL,在不久前已经被弃用,取而代之的是PDO或MySQLi。话虽如此,让我们继续前进

您需要在连接上设置字符集,即,您需要执行以下操作才能使其正常工作-

<?php
...
$link = mysqli_connect(...);
mysql_set_charset('utf8', $link); // This is your answer
...

我相信你唯一错过的就是

mysql_set_charset('utf8');
即使您已为表或字段设置了
utf8\u unicode\u ci
,与数据库的连接也不一定自动设置为使用
utf8
字符编码



NB:您应该考虑使用,并且您应该真正考虑在数据库(至少表)级别上设置CARCAT集合和排序,而不是字段级别。(我看到你有

latin1_swedish_ci
作为默认值,表明你的整个数据库是
latin1_swedish_ci

,如果你只是打印你得到的?我的意思是…使用带有标题的echo(“Content Type:text/html;charset=utf-8”);@Boctulus-参考输出的JSON数据快照,我在浏览器中得到了这个。尝试使用mysqli_set_charset)($conn,'utf8')连接到数据库后
<?php
// NOTE : I prefer using PDO but I have used mysqli for this example
// NOTE : The following code HAS NOT BEEN TESTED!

header('Content-Type: application/json; charset=UTF-8');

// Connection information
$link = new mysqli($host, $user, $password, $dbname);

$link->set_charset('utf8'); // This is important or mysql_set_charset('utf8', $link) if you insist on using mysql_*

// Check connection
if (mysqli_connect_errno()) {
    printf('Connect failed: %s\n', mysqli_connect_error());

    exit();
}

$outp = '';

// Always use prepared statements!!
if ($stmt = $link->prepare('SELECT qid, ans_tam FROM poll_quest WHERE qid = ? LIMIT 1')) {
    $stmt->bind_param('i', $nqid); // user 's' if this is a string for the first parameter

    $stmt->execute();

    $stmt->bind_result($qid, $ans_tam);

    while ($stmt->fetch()) {
        $qflag = true;

        $outp .= '{ "ID" : ' . $qid . ', "Ans" : "' . $ans_tam . '" }';
    }

    $stmt->close();
}

echo('{"records":[' . $outp . ']}');
mysql_set_charset('utf8');