我正在使用 utf8_unicode_ci 为MYSQL表中的列存储TAMIL语言字符。
我正在实现一个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);
?>
我的泰米尔语单词
MySQL表结构快照:
MySQL表数据快照:
输出JSON数据快照:
{
"records":[
{
"ID":"1",
"Ans":"??. ????????"
},
{
"ID":"2",
"Ans":"??. ?????????"
},
........
{
"ID":"5",
"Ans":"??. ??????????"
}
]
}
请帮助我,如何获取Response JSON中的实际字符......
答案 0 :(得分:1)
首先,MySQL驱动程序即mysql_ *已被弃用,有利于PDO或MySQLi。话虽如此,让我们继续前进。
您的答案需要在连接上设置字符集,即您需要执行以下操作才能使其正常工作 -
<?php
...
$link = mysqli_connect(...);
mysql_set_charset('utf8', $link); // This is your answer
...
为了将来的参考,我重新编写了上面的代码,使用MySQLi来帮助你 -
<?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 . ']}');
答案 1 :(得分:1)
我相信你唯一遗漏的是
mysql_set_charset('utf8');
即使您为表或字段设置了utf8_unicode_ci
,与数据库的连接也不一定会自动设置为使用utf8
字符编码。
注意:你应该考虑使用utf8mb4_unicode_ci instead of utf_unicode_ci,你应该考虑在数据库(至少是表格)级别而不是字段级别上设置字符集和校对(我看到你有latin1_swedish_ci
作为默认值表示整个数据库为latin1_swedish_ci
。